OpenCV directshow camera access会生成黑色图像,除非之前已从其他软件打开该摄像头
模拟framegrabber的图像只有在演示应用程序打开grabber后才能通过OpenCV读取,否则会产生黑色图像。 下面是调试代码OpenCV directshow camera access会生成黑色图像,除非之前已从其他软件打开该摄像头,opencv,directshow,Opencv,Directshow,模拟framegrabber的图像只有在演示应用程序打开grabber后才能通过OpenCV读取,否则会产生黑色图像。 下面是调试代码 qDebug() << "Brightness" << cap->get(CV_CAP_PROP_BRIGHTNESS); qDebug() << "Contrast " << cap->get(CV_CAP_PROP_CONTRAST); qDebug() << "Saturation"
qDebug() << "Brightness" << cap->get(CV_CAP_PROP_BRIGHTNESS);
qDebug() << "Contrast " << cap->get(CV_CAP_PROP_CONTRAST);
qDebug() << "Saturation" << cap->get(CV_CAP_PROP_SATURATION);
qDebug() << "Hue " << cap->get(CV_CAP_PROP_HUE);
qDebug() << "Gain " << cap->get(CV_CAP_PROP_GAIN);
qDebug() << "Exposure " << cap->get(CV_CAP_PROP_EXPOSURE);
qDebug() << "Width " << cap->get(CV_CAP_PROP_FRAME_WIDTH);
qDebug() << "Height " << cap->get(CV_CAP_PROP_FRAME_HEIGHT);
当然,这些设置似乎有缺陷,但在grabber的演示应用程序访问设备后成功打开设备时,它们是相同的
我想这是一个驱动程序问题,OpenCV无法访问某些设备设置,包括无效的标准设置(增益、曝光)。可以使用哪些较低级别的方法来查找/写入这些设置?似乎摄影机实际上还没有加载,OpenCV已经尝试拍摄图像。 对我来说,查询更多帧通常会有所帮助,如下所示:
CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
if ( capture ) {
IplImage* frame = cvQueryFrame( capture );
for (int i = 0; i < `0; i++)
{
frame = cvQueryFrame(capture);
}
cvSaveImage("mypic.jpg",frame);
cvReleaseCapture( &capture );
}
CvCapture*capture=cvCaptureFromCAM(CV\u CAP\u ANY);
如果(捕获){
IplImage*frame=cvQueryFrame(捕获);
for(int i=0;i<`0;i++)
{
帧=cvQueryFrame(捕获);
}
cvSaveImage(“mypic.jpg”,框架);
cvReleaseCapture(&capture);
}
CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
if ( capture ) {
IplImage* frame = cvQueryFrame( capture );
for (int i = 0; i < `0; i++)
{
frame = cvQueryFrame(capture);
}
cvSaveImage("mypic.jpg",frame);
cvReleaseCapture( &capture );
}