2013-03-20 6 views
11
이 erorr 메시지가 로지텍 C270 (OpenCV의 2.4.2/C++)와 우분투에서 간단한 카메라 캡쳐를 실행에 나타납니다

:OpenCV의 오류 -> HIGHGUI ERROR : 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

I 얻을 프레임 그러나 아래 참조 매트 오브젝트에 기록 할 때 교환 프레임 폭과 높이의 값 :

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; 
012,351,641을

출력 :

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

문제를 디버깅하고 싶지 않고 웹캠의 프레임이 문제없이 표시되는 경우 메신저를 쏠 수도 있습니다. 미리 빌드 된 바이너리를 설치하는 것과는 반대로 소스에서 OpenCV를 빌드 한 경우 아래 지침이 작동합니다.

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 매크로는 외부 데이터에 대한 오류 메시지를 인쇄 할 일으키는 것입니다. 그냥 주석으로 처리하고, OpenCV를 다시 빌드하고 작업을 계속하십시오. 나는 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 라이브러리에, 같은데. 알 수없는 이유로 OpenCV 라이브러리에서 제대로 작동하지 않습니다. 나는 JPEG를 지원하지 않고 컴파일하려고 시도했으며이 문제를 해결했습니다.

cmake -D CMAKE_BUILD_TYPE = 릴리스 CMAKE_INSTALL_PREFIX = -D/usr/지방 -D BUILD_SHARED_LIBS = OFF -D BUILD_EXAMPLES = -D를 OFF OFF BUILD_TESTS = -D BUILD_PERF_TESTS = -D WITH_JPEG를 OFF OFF = -D WITH_IPP = OFF ..

당신은 내 블로그의 모든 세부 사항 찾을 수 있습니다

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

+2

Linux의 JDK에는 자체 libjpeg가 포함되어 있습니다. 이제는 컴파일하는 동안이 라이브러리가 Linux에서 올바른 대신 사용되는 것 같습니다. 그리고 그것은 문제를 일으킨다. – Kanaris007

0

그냥 어떻게 든 작동하지 않습니다 신속하고 grep -v Corrupt 출력을 제거하려는 경우 - 나를 위해 같은 - 당신은 또한 리디렉션 할 수 열려진 ~에 아무것도, 예를 들면

./my_app 2> /dev/null 

python my_app.py 2> /dev/null 

물론 다른 오류 메시지도 숨길 것입니다.