2014-09-29 3 views
1

일부 라스베리 파이에 연결된 웹캠이 있으며 OpenCV를 사용하여 이미지를 캡처합니다. 그러나 카메라가 움직이지 않는다고 생각하는 경우에도 이미지는 다소 흔들립니다. 하나의 카메라 만 실행하면 USB 대역폭 문제 일 가능성이 높습니다. 대역폭을 줄이기 위해 프레임 속도를 줄이려고 시도했습니다. Logitech C210은 5,10,15,20,25 및 30fps의 프레임 속도를 지원할 수 있어야합니다.Logitech C210 웹캠에서 C++의 v4l2를 사용하는 라즈베리 파이의 프레임 속도

OpenCV가 어쨌든이 라이브러리를 사용하는 것처럼 보이기 때문에 v4l2에 대한 문서를 살펴 봤습니다 (별로 좋지는 않지만). 나는 v4l2_ioctl() 카메라 컨트롤을 설정하는 데 문제없이 사용하고 있습니다. 어떤 이유로 프레임 속도를 비슷한 방식으로 설정할 수 없었습니다. 다음은 설명서 here에 따라 수행 할 작업입니다.

int descriptor = v4l2_open("/dev/video0", O_RDWR); 
v4l2_captureparm s; 
s.capability = V4L2_CAP_TIMEPERFRAME; 
s.timeperframe.numerator = 1; 
s.timeperframe.denominator = 5; 
if(v4l2_ioctl(descriptor, VIDIOC_S_PARM, &s) !=0) 
{ 
    cout<< "Failed to set frame rate "<<endl; 
} 

컴파일하는 데 문제가 없지만 값이 성공적으로 설정되지 않았 음을 나타내는 couted 오류 메시지가 표시됩니다.

누구나 내가 뭘 잘못하고 있는지 아이디어가 있습니까?

미리 감사드립니다.

답변

2

잘못된 구조를 사용하고 있습니다. Y0u는

struct v4l2_streamparm 

대신 사용해야합니다

struct v4l2_captureparm 

먼저 체크 카메라가 원하는 resoulution 및 픽셀 형식에 대한 그 프레임 속도를 지원하는 경우 :

v4l2-ctl --list-formats-ext 

그런 다음, 당신은 해상도를 설정해야합니다을 및 픽셀 형식. 예를 들면 다음과 같습니다.

struct v4l2_format fmt; 
meset(&fmt, 0, sizeof(fmt)); 
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 
fmt.fmt.pix.width  = 1280; 
fmt.fmt.pix.height  = 720; 
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG; 
fmt.fmt.pix.field  = V4L2_FIELD_NONE; 

if (v4l2_ioctl(m_fd, VIDIOC_S_FMT, &fmt) != 0) 
{ 
    // Error 
} 

이상적으로 지정자와 분모는 장치에서 열거 된 것 중에서 선택해야합니다. 또한 v4l2_streamparm 구조를 가져야합니다.

struct v4l2_streamparm streamparm; 
memset(&streamparm, 0, sizeof(streamparm)); 
streamparm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 
if (v4l2_ioctl(m_fd, VIDIOC_G_PARM, &streamparm) != 0) 
{ 
    // Error 
} 

streamparm.parm.capture.capturemode |= V4L2_CAP_TIMEPERFRAME; 
streamparm.timeperframe.numerator = X; 
streamparm.timeperframe.denominator = y; 
if(v4l2_ioctl(descriptor,VIDEO_S_PARM, &s) !=0) 
{ 
    cout<< "Failed to set frame rate "<<endl; 
} 
1

또한 이러한 웹캠에 문제가있는 것은 아닌지 확인하십시오. 파이 포트는 USB 포트에서 많은 전력을 공급할 수 있으며 wifi 동글 (그 말은 싫다.)과 같은 모든 것이 전력을 위해 경쟁 할 수 있으며 그 결과로 나쁜 그림을 본 적이있다. 아마도 RPi 호환 , 즉 Pi에는 5V 연결이 없습니다. rpi 권장 전원 공급 허브를 구입하십시오.

관련 문제