c++opencv上的灰色屏幕
Gray screen on c++ opencv
我搜索了很多关于我的简单问题的信息,但没有找到解决方案。当我运行我的代码时,黑色控制台会向我显示相机的帧大小,但在窗口中视频没有显示,它显示的是一个纯灰色屏幕。但如果我从硬盘上播放视频,它就可以正常工作。请帮我一个。这是我的代码
#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 Foundn");
break;
}
cvShowImage("Window", img);
cvWaitKey(50);
}
cvReleaseImage(&img);
cvDestroyWindow("Window");
cvReleaseCapture(&capture);
return 0;
}
我使用opencv 2.2和Visual studio 2010
有一点显然是错误的,您需要将调用的顺序更改为:
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()
一起存储到磁盘上,如果该图像正常,则意味着捕获过程实际上运行良好,问题出在其他地方。
我将openCV版本2.2切换到2.1,它的工作非常完美。。。。。。。
我使用的是OpenCV 3.1版本,我遇到了同样的问题,我重新构建了OpenCV 3.1并重新检查了环境变量,所以我的问题得到了解决。如果需要,您可以备份已构建的opencv并提取。抱歉我的英语不好:)
相关文章:
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- Winapi:屏幕截图未显示在窗口中
- 如何在快板的屏幕中显示子位图的绘制?
- 按回车键后输出屏幕关闭
- 要在屏幕上绘制一些小瓷砖,我应该使用 QQuickItem 还是 QQuickPaintedItem?
- SFML 向下移动时如何围绕屏幕中心旋转?
- 截取屏幕截图后程序卡住
- OpenCV C++将灰色图像组合成彩色图像
- C++鼠标单击时的屏幕截图不起作用
- 屏幕插入运算符<<的运算符过载问题
- 获取网格中心的屏幕位置
- SFML 中的字体.信息不显示在屏幕上.显示的不是信息,而是点
- 如何在屏幕上环绕x和y?
- GetDIBits 在屏幕捕获函数中多次迭代后返回零
- OpenGL ES 2.0将纹理绘制到屏幕上是行不通的
- GTKMM:拍摄绘图区域的屏幕截图?
- c++opencv上的灰色屏幕