2010-04-12 12 views
6

मैं एमएस विजुअल C++ 2008 में नए OpenCV 2.0 एपीआई का उपयोग करने की कोशिश कर रहा हूँ और इस साधारण प्रोग्राम लिखा है:OpenCV 2.0 सी ++ एपीआई imshow का उपयोग कर: रिटर्न बिना क्रिया का अपवाद और "बुरा-ध्वज"

cv::Mat img1 = cv::imread("image.jpg",1); 
cv::namedWindow("My Window", CV_WINDOW_AUTOSIZE); 
cv::imshow("My Window", img1); 

दृश्य स्टूडियो एक अनचाहे अपवाद लौटाता है और कंसोल रिटर्न देता है:

OpenCV Error: bad flag (parameter or structure field) 
(Unrecognized or unsupported array type) in unknown function, 
file ..\..\..\..\ocv\opencv\src\cxcore\cxarray.cpp, line 2376 

छवि प्रदर्शित नहीं होती है। इसके अलावा विंडो "माई विंडो" में एक अजीब कैप्शन है: "ÌÌÌÌ मेरी विंडो", जो नाम पर निर्भर नहीं है।

cvLoadImage, cvNamedWindow या cvShowImage जैसे कमांड का उपयोग करते हुए "पुराना" सी एपीआई एक ही छवि फ़ाइल के लिए किसी भी समस्या के बिना काम करता है। मैंने सफलता के बिना कई अलग-अलग सामानों की कोशिश की।

मैं यहां किसी भी मदद की सराहना करता हूं।

कोनराड

+1

ऐसा लगता है कि 'imread' कॉल विफल हो रहा है; आप 'img1.data == NULL' के परीक्षण के द्वारा जांच सकते हैं। दुर्भाग्यवश, मैंने अभी कोशिश की और मुझे यहां एक ही समस्या मिल रही है। – tzaman

उत्तर

6

इस मुद्दे के लिए सहायता है।

समाधान यह है कि लिंकर में सामान्य प्रस्तावित ओपनसीवी लाइब्रेरी फाइलें ठीक से काम नहीं कर रही हैं।

दृश्य C++ में: इसके बजाय यह द्वारा डिबग पुस्तकालय फ़ाइलों का उपयोग करने की कोशिश

परियोजना के लिए> गुण (या Alt-F7) विन्यास गुण> Linker-> इनपुट-> अतिरिक्त निर्भरता

जाना

की जगह सामान्य "cv210.lib cxcore210.lib highgui210.lib" द्वारा "cv210d.lib cxcore210d.lib highgui210d.lib" - जो डीबगिंग पुस्तकालय हैं।

ओपनसीवी 2.0 एपीआई कमांड अब काम करना चाहिए।

+0

ओह, ज़ाहिर है, इससे समस्याएं पैदा होंगी। अच्छा पकड़ा! हालांकि, आपके रिलीज मोड बिल्ड के लिए गैर-डीबग संस्करणों को लिंक करना याद रखें। – tzaman

+0

नवीनतम स्थिर या dev: 2.3.1 या 2.3.2d – Profane

+0

के साथ काम नहीं करना प्रतीत होता है मुझे भी उस समस्या का सामना करना पड़ा और निषिद्ध हो गया है, इसके लिए बहुत बहुत धन्यवाद – Kiradev

6

के रूप में मैं सिर्फ टिप्पणी की, imread मेरे लिए या तो काम नहीं कर रहा। एक छोटे से googling अन्य लोगों को एक ही समस्या है दिखाता है; मुझे लगता है कि यह लाइब्रेरी कोड में एक बग है।

IplImage* img = cvLoadImage("lena.jpg"); 
cv::Mat lena(img); 
cvReleaseImage(&img); 

इस तरह, आप कम से कम अपना सामान के बाकी के लिए सी ++ एपीआई का उपयोग कर सकते हैं: अभी के लिए, यहाँ एक hacky वैकल्पिक हल है।

+0

धन्यवाद, यह एक उपयोगी दृष्टिकोण है - ठीक काम करता है और मुझे बहुत मदद करता है। – Konrad

+0

मदद करने के लिए खुशी हुई। क्या मैं आपको इस पोस्ट के बगल में ऊपर तीर और चेकमार्क पर क्लिक करने के लिए परेशान कर सकता हूं? :) – tzaman

+0

कोई चिंता नहीं, मैंने कोशिश की। लेकिन मुझे अभी तक अनुमति नहीं है :) – Konrad

0

मेरा मानना ​​है कि यह यूनिकोड से संबंधित हो सकता है।

उदाहरण के लिए मैक्रो _TEXT()

का प्रयास करें:

cv::Mat img1 = cv::imread(_TEXT("image.jpg"),1); 

Unicode in Visual C++ 2

2

सबसे पहले, आप बेहतर अपने स्वयं के संस्करण OpenCV संकलन होगा।

मुझे बिल्ड के साथ एक ही त्रुटि थी (मुझे Sourceforge से मिला), और डीबग और रिलीज़ संस्करणों में अपना खुद का संस्करण संकलित करके हल किया गया।

और सुनिश्चित करें कि आप मूल सिस्टम env चर PATH को नए निर्माण फ़ोल्डर build/bin पर बदल दें, तो आप डीबग मोड में imshow() बना और चला सकते हैं।

2

क्या आप सुनिश्चित हैं कि आपने पूरे पथ /home/... से शुरू किया है। मुझे आपके जैसा ही समस्या थी, लेकिन जब मैंने पूरा रास्ता जोड़ा, चीजें बहुत अच्छी तरह से काम करती हैं। इस तथ्य के बावजूद कि पथ को शामिल करने में पथ मौजूद है, पूरे पथ को जोड़ा जाना था।

imread मैटलैब के विपरीत ओपनसीवी में फ़ाइल/फ़ोल्डर नहीं मिलने पर त्रुटि वापस नहीं आती है - इसके बजाय यह एक शून्य मैट्रिक्स देता है, जो बदले में imshow के दौरान त्रुटि के रूप में दिखाई देता है। इसके अलावा, imread शामिल फ़ोल्डर या कार्यक्षेत्र में छवि फ़ाइलों को नहीं देखता है। तो, जब भी संभव हो पूरे मार्ग निर्दिष्ट करें।

भविष्य के संदर्भों के लिए कृपया इसका ध्यान दें।

3

मुझे ऊपर वर्णित वही समस्या थी जो लिंकर की सेटिंग्स के कारण होती है।

मुझे अन्य धागे, OpenCV 2.3 and Visual Studio 2010 में उत्तर मिला।

इसे यहाँ दोहराने के लिए:

अपनी परियोजना के गुण (सही उस पर क्लिक करें)

  • C/C++
    • जनरल
      • निर्देशिका जोड़ने शामिल < अपने निर्देशिका> \ OpenCV2.3 \ शामिल \ opencv2, < अपने निर्देशिका> \ OpenCV2.3 \ \ opencv और < अपने निर्देशिका> शामिल \ OpenCV2.3 \ शामिल
  • लिंकर

    • जनरल
      • सूची आइटम
    • इनपुट
      • opencv_core230d.lib opencv_highgui230d.lib की तरह और इतने पर सभी libs जोड़ें ...

एक बार मैं ऊपर किया है, मैं imshow और imread + अन्य सभी सीपीपी कार्यों निर्बाध रूप से चलते कर सकते हैं! ओपी की समस्या शायद पहले ही हल हो चुकी है, लेकिन उम्मीद है कि यह उन लोगों के लिए उपयोगी होगा जो यहां एक ही समाधान की तलाश में हैं।

संबंधित मुद्दे