2013-03-20 4 views
11

इस erorr संदेश logitech C270 (OpenCV 2.4.2/C++) के साथ Ubuntu पर साधारण कैमरा कब्जा चलाने पर प्रकट होता है:OpenCV त्रुटि -> highgui त्रुटि: V4L/V4L2: VIDIOC_S_CROP

HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP

और आगे:

Corrupt JPEG data: 2 extraneous bytes before marker 0xd1 Corrupt JPEG data: 1 extraneous bytes before marker 0xd6 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0

मैं फ्रेम लेकिन फ्रेम चौड़ाई और ऊंचाई बदली जब एक चटाई वस्तु के लिए लिख नीचे देखें का मान:

Mat frame; 
videoCapture = new VideoCapture(camId); 
if(!videoCapture->isOpened()) throw Exception(); 

cout << "Frame width: " << videoCapture->get(CV_CAP_PROP_FRAME_WIDTH) << endl; 
cout << "Frame height: " << videoCapture->get(CV_CAP_PROP_FRAME_HEIGHT) << endl; 

(*videoCapture) >> frame; 

cout << "Mat width: " << frame.rows << endl; 
cout << "Mat height: " << frame.cols << endl; 

आउटपुट:

Frame width: 640 
Frame height: 480 
Mat width: 480 
Mat height: 640 

उत्तर

2

एक छवि की चौड़ाई स्तंभों की अपनी संख्या से दिया जाता है। आपका कोड

cout << "Mat width: " << frame.cols << endl; 
cout << "Mat height: " << frame.rows << endl; 

तो चौड़ाई और ऊंचाई के बीच कोई स्वैप नहीं होना चाहिए।

+0

क्षमा करें, मेरी गलती-.- – user2192424

+3

लेकिन मुझे नहीं पता कि आपको प्राप्त होने वाले त्रुटि संदेशों से कैसे छुटकारा पाना है। मैं उन्हें भी अपनी मशीन पर ले जाता हूं। – carlito

7

यदि आप समस्या को डीबग करने की तरह महसूस नहीं करते हैं, और आपके वेबकैम से फ्रेम किसी भी मुद्दे के बिना प्रदर्शित किए जा रहे हैं, तो आपका विकल्प केवल मैसेंजर को शूट करना है। यदि आपने पूर्व-निर्मित बाइनरी स्थापित करने के विरोध में स्रोत से ओपनसीवी बनाया है, तो नीचे दिए गए निर्देश काम करते हैं।

grep -R "Corrupt JPEG data" ~/src/opencv-2.4.4/ से शुरू करें और जब तक आप जो चाहते हैं उसे प्राप्त न करें तब तक खरगोश छेद में गहराई से जाएं। मेरे मामले में दोषी opencv-2.4.4/thirdparty/libjpeg/jdmarker.c:908 पर है:

if (cinfo->marker->discarded_bytes != 0) { 
    WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c); 
    cinfo->marker->discarded_bytes = 0; 
    } 

WARNMS2 मैक्रो क्या पैदा कर बाहरी डेटा के बारे में त्रुटि संदेश मुद्रित करने के लिए है। बस इसे टिप्पणी करें, ओपनसीवी का पुनर्निर्माण करें और अपने काम के साथ आगे बढ़ें। मेरे पास एक C270 भी है, उबंटू 12.04 चलाएं, और मैंने उसी वर्णित त्रुटि संदेश का अनुभव किया जब तक मैंने ऊपर वर्णित नहीं किया।

5

मुद्दे के बारे में:

Corrupt JPEG data: 2 extraneous bytes before marker 0xd1 Corrupt JPEG data: 1 extraneous bytes before marker 0xd6 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0

तरह लग रहा है, इस मुद्दे libjpeg पुस्तकालय में है। किसी अज्ञात कारण के लिए यह ओपनसीवी लाइब्रेरी के तहत गलत काम करता है। मैंने जेपीईजी के समर्थन के बिना संकलन करने की कोशिश की और इस मुद्दे को हल किया।

cmake डी CMAKE_BUILD_TYPE = रिलीज डी CMAKE_INSTALL_PREFIX =/usr/स्थानीय डी BUILD_SHARED_LIBS = रवाना डी BUILD_EXAMPLES = रवाना डी BUILD_TESTS = रवाना डी BUILD_PERF_TESTS = रवाना डी WITH_JPEG = रवाना डी WITH_IPP = बंद ..

आप अपने ब्लॉग में सभी विवरण देख सकते हैं:

http://privateblog.info/linux/opencv-i-corrupt-jpeg-data-na-linux/

+2

लिनक्स पर जेडीके में अपना स्वयं का libjpeg है। अब मुझे लगता है कि संकलन के दौरान लिनक्स से सही के बजाय इस पुस्तकालय का उपयोग किया जाता है। और यह मुद्दा का कारण बनता है। – Kanaris007

0

तुम सिर्फ किसी भी तरह के लिए काम नहीं करता है जल्दी और grep -v Corrupt उत्पादन से छुटकारा पाने के करना चाहते हैं - मेरे लिए तरह - आप भी अनुप्रेषित सकता stderr कुछ भी नहीं, उदाहरण के लिए

./my_app 2> /dev/null 

python my_app.py 2> /dev/null 

यह निश्चित रूप से अन्य त्रुटि संदेशों को भी छुपाएगा।

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