Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV directshow camera access会生成黑色图像,除非之前已从其他软件打开该摄像头_Opencv_Directshow - Fatal编程技术网

OpenCV directshow camera access会生成黑色图像,除非之前已从其他软件打开该摄像头

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"

模拟framegrabber的图像只有在演示应用程序打开grabber后才能通过OpenCV读取,否则会产生黑色图像。 下面是调试代码

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 );
}