我正在尝试将 OpenCV(版本 2.3.1)包含在我正在处理的项目中。相机正在向我的程序(在 Windows 7 64 位机器上的 Microsoft Visual C++ 2008 中)发送一个图像流,该程序将其存储在一个无符号的 8 位整数缓冲区中。我想使用 OpenCV 在窗口中显示此流。现在,我似乎无法在我的 OpenCV 窗口中显示任何图像,所以我还没有使用我的图像流;只是一个 JPEG 文件。
首先我声明我的窗口:
namedWindow( "Window", CV_WINDOW_AUTOSIZE );
然后我尝试填充它:
char* imgName = "C:\...\Jellyfish.jpg";
Mat imgMat = imread(imgName, 1);
if(imgMat.data)
{
imshow( "Window", imgMat );
}
当我的程序到达声明窗口的位置时,会出现一个灰色的小窗口。当它到达应该显示图像的位置时,窗口的尺寸会更改为图像的尺寸(我已经用不同的图像对此进行了测试)但窗口内部仍然是一个普通的灰色框。
是什么导致了这个奇怪的错误?该程序显然找到了该图像,否则它无法正确更改其尺寸。
最佳答案
您需要在imshow
之后添加waitKey(2)
函数调用。
来自 waitKey 的 OpenCV 文档:
This function is the only method in HighGUI that can fetch and handle events, so it needs to be called periodically for normal event processing unless HighGUI is used within an environment that takes care of event processing.
如果没有此函数,Windows 将无法处理 PAINT 事件并重绘您的窗口。
关于visual-c++ - OpenCV图像显示失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7264185/