c ++ opencv上的灰屏
Posted
技术标签:
【中文标题】c ++ opencv上的灰屏【英文标题】:Gray screen on c++ opencv 【发布时间】:2012-07-13 06:22:57 【问题描述】:我对我的简单问题进行了很多搜索,但没有找到解决方案。当我运行我的代码黑色控制台向我显示相机帧大小但在窗口中视频未显示时,它显示一个纯灰色屏幕。但是,如果我从 HDD 播放视频,则它可以正常工作。 请帮我一个。 这是我的代码
#include <iostream>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
using namespace std;
int main(int argc, char** argv)
CvCapture *capture;
IplImage* img=0;
cvNamedWindow("Window");
capture = cvCreateCameraCapture( -1);
//capture = cvCaptureFromAVI("1.mp4");
//capture = cvCaptureFromCAM(-1);
int ext=0;
assert( capture );
if(capture==NULL)
cout<<"Cam Not Found!!!"<<endl;
getchar();
return -5;
while ( true )
img = cvQueryFrame( capture );
cvSaveImage("1.jpg",img);
if (!img)
printf("Image not Found\n");
break;
cvShowImage("Window", img);
cvWaitKey(50);
cvReleaseImage(&img);
cvDestroyWindow("Window");
cvReleaseCapture(&capture);
return 0;
我使用 opencv 2.2 和 Visual Studio 2010
【问题讨论】:
黑屏输出是什么?在 'if(!capture)' 的输出下方插入一个 getchar() 方法,并在黑屏上检查输出。 我这样做了,但还是一样。 黑屏输出?没有?你有网络摄像头吗? 在黑框中显示消息“相机帧大小:640 x 480 像素”。网络摄像头:Hp ProBook 4430s 固定摄像头。操作系统:Win 7(32位) 你应该交换cv::waitKey(20)
和cvShowImage("Window", img)
。 “Size of camera frame...”是否打印了多次?
【参考方案1】:
一件事显然是错误的,您需要将调用顺序更改为:
cvShowImage("Window", img);
cv::waitKey(20);
其次,检查cvQueryFrame()
是否成功很重要:
img = cvQueryFrame( capture );
if (!img)
// print something
break;
编辑:
顺便说一句,我刚刚注意到您将 OpenCV 的 C 接口与 C++ 接口混合在一起。不要那样做!将cv::waitKey(50);
替换为cvWaitKey(50);
。
出于调试目的,如果cvQueryFrame()
成功,我建议您使用cvSaveImage()
将一帧存储到磁盘,如果该图像正常,则表示捕获过程实际上工作正常,问题出在其他地方。
【讨论】:
感谢您的回复。我改变我的代码。当我使用 cvSaveImage() 保存图像时,它是一个纯灰色图像。根本不工作。 老大我可以用opencv 2.4来解决我的问题吗?我认为 2.2 已经过时,不支持我的相机。 我刚刚更新了我的答案。尝试将cv::waitKey()
替换为 cvWaitKey()
,然后继续将您的 OpenCV 更新到 2.4 或更高版本。
老大我希望我得换个相机。我在opencv 2.4中面临同样的问题。我改变了 cvWaitKey() 仍然是同样的问题。
是的,您需要测试其他相机以确保您的代码没有问题。【参考方案2】:
我刚刚将 openCV 2.2 版切换到 2.1 版,它的工作完美.......
【讨论】:
【参考方案3】:我使用的是 OpenCV 3.1 版,我遇到了同样的问题,我重新构建了 openCV 3.1 并重新检查了环境变量,所以我的问题解决了。如果需要,您可以备份内置的 opencv 并提取。对不起我的英语不好:)
【讨论】:
以上是关于c ++ opencv上的灰屏的主要内容,如果未能解决你的问题,请参考以下文章