OpenCV의 Logitech C920에서 비디오 스트림을 캡처하려고합니다. Labview를 사용하면 30fps 1080p의 MJPG 스트림에 액세스 할 수 있습니다. opencv에서는 5fps 또는 640x480으로 제한됩니다. 여기 openCV를 사용하여 logitech c920에서 30fps로 1080p 캡처 2.4.3
는 카메라 설정과 관련된 코드 :this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G'));
이 모두 반환 한, 그러나 나는 YUY2 스트림에 해당하는 1080p의의 5fps 스트림을 얻는다.
이this->camRef.set(CV_CAP_PROP_FPS, 30);
이 0 내가 640 × 480에 30 프레임 스트림을 얻을 반환
나는 다음 행을 추가합니다. 나에게 그것은 MJPG 설정이 받아 들여지지 않는 것처럼 보이지만 나는 무엇을 해야할지, 어떻게 고쳐야할지 모른다.
편집 : 다음 프로그램이 다운됩니다.
this->camRef.read(this->image);
std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, config.width) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, config.height) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G')) << std::endl;
std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC) << std::endl;
그런 다음 내 실행 코드에서 나는 다음과 같습니다
void camera::run()
{
while(true)
{
if(this->camRef.read(this->image) == 0)
{
if(this->capture)
{
cv::imwrite(fileName,this->image);
this->count++;
}
}
msleep(15);
}
}
EDIT2 : 해결 방법은 카메라의 높이와 폭을 설정하기 전에 FOURCC 코덱을 설정하는 것입니다.
VideoCapture cap(0);
if(!cap.isOpened())
return -1;
Mat frame;
cap >> frame;
double fps;
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1080.0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1920.0);
//add the loop here
을하고 MJPG을 설정하지 않고 작동 여부를 확인 :
, 당신은 코덱 설정 한 후 그것을 할 필요가 있지만, 폭 이전/높이 설정 – MartinM
EDIT2와 같은 사운드는 30fps에서 1080p를 제공했습니다. 대답으로 바뀌고 받아 들여 져야 문제가 해결 된 것처럼 보입니다. –