2011-08-31 129 views
1

我想在我正在开发的项目中包含OpenCV(版本2.3.1)。相机正在发送我的程序(在Windows 7 64位机器上的Microsoft Visual C++ 2008中)图像流,程序将其存储在无符号的8位整数缓冲区中。我想使用OpenCV在窗口中显示此流。现在,我似乎无法在我的OpenCV窗口中显示任何图像,所以我还没有使用我的图像流;只是一个JPEG文件。OpenCV图像显示失败

首先我声明我的窗口:

namedWindow("Window", CV_WINDOW_AUTOSIZE); 

然后我尝试以填补它:

char* imgName = "C:\...\Jellyfish.jpg"; 
Mat imgMat = imread(imgName, 1); 
if(imgMat.data) 
{ 
    imshow("Window", imgMat); 
} 

当我的程序获取到该窗口被宣告点,会出现一个小小的灰色窗口。当它达到应该显示图像的位置时,窗口的尺寸会变为图像的尺寸(我已经用不同的图像测试了这个尺寸),但窗口内部仍然是一个普通的灰色框。

什么是造成这个奇怪的错误?该程序显然找到了该图像,否则它将无法正确更改其尺寸。

回答

2

您需要在imshow之后添加waitKey(2)函数调用。

从OpenCV的文档waitKey:

这个函数在HighGUI唯一方法,可以获取并处理 事件,因此它需要除非HighGUI被内的用于周期性称为正常事件 处理需要关心事件处理的环境。

没有此功能,Windows无法处理PAINT事件并重新绘制窗口。

+0

谢谢,我添加了该功能,图像现在显示在窗口中。我需要阅读它的文档,我担心它会影响我的视频流的速度,但它没有引起显着的差异。 – Andrew