本人刚开始学习OpenCV3,主要是跟着毛星云老师的《OpenCV3编程入门》进行学习,学习过程中遇到一些问题,希望能在这里跟大家分享,同时希望得到有效的解答。由于本人是个小白,有什么不对的地方,还望指教,谢谢!!
话不多说,进入正题!
——————————————————————————————————————————
关于OpenCV3中读入图片后,显示为灰色的问题
环境:OpenCV 3.4.1 +VS2015+Windows x64
注意:根据其他博文的说法,VS2015与OpenCV v14版本对应,所以配置环境时请注意。
先上图看一看是什么情况吧:
此时图片显示失败,呈现灰色。
——————————————————————————————————————————
1、图片路径错误导致图片读取失败问题
本人在网上看了很多博文以后,发现普遍的解释是:图片未找到,图片读取失败等,针对于此问题,本人做了如下尝试:
Mat srcImage = imread ("1.jpg");
if ( srcImage.empty() )
{
std::cout << "图片读取失败!" << "\n";
return -1;
}
imshow ("show", srcImage);
但发现并非图片读取的问题,大家可以将读取的图片信息输出到控制台看一下,即std::cout<<srcImage;
std::cout<<srcImage;
imshow("show",srcImage);
当然,如果是图片路径错误,有两种方式:① 改成绝对路径;② 将资源放在.cpp文件同目录下,即可直接使用文件名读取资源。
2、非图片读取失败的其他解决方案
其中一篇博文提出的解决方案为
Mat srcImage = imread ("1.jpg");
if ( srcImage.empty() )
{
std::cout << "图片读取失败!" << "\n";
return -1;
}
namedWindow("yuantupian",1);//显示一个窗口
imshow ("show", srcImage);
博主说问题解决了,而我尝试的效果为(并未解决):
(附上该博文的连接)
当然博主也不清楚为什么他的尝试成功了,如果大家知道,还望告知。
3、我的解决方案及希望被解答的问题
在经过很多尝试过后,我有点脑壳儿疼了。怎么刚开始学,就这么坎坷。当然,要学肯定不能放弃了,身边也没有人可以问,就自己多试试。不过最后还真的给我试出来了,上代码:
#include "opencv2\opencv.hpp"
using namespace cv;
int main ()
{
Mat srcImage = imread ("1.jpg");
if ( srcImage.empty() )
{
std::cout << "图片为空" <<"\n";
return -1;
}
imshow ("show", srcImage);
//system ("pause");
waitKey ( 3000 );
return 0;
}
运行效果为:
成功显示。
从代码上来看,应该是 system("pause"); 和 waitKey(30); 两个函数的问题。
这我就搞不明白了,所以希望了解的各位大佬帮忙解答一下,万分感谢。
——————————————————————————————————————————
waitKey()函数
函数功能:
waitKey()函数的功能是不断刷新图像,频率时间为delay,单位为ms。
返回值为当前键盘按键值。
如果delay<0,等待时间无限长,返回值为按键值
经常程序里面出现 if( waitKey(10) >= 0 ) 是指10ms内按任意键进入此 if 块。