本人刚开始学习OpenCV3,主要是跟着毛星云老师的《OpenCV3编程入门》进行学习,学习过程中遇到一些问题,希望能在这里跟大家分享,同时希望得到有效的解答。由于本人是个小白,有什么不对的地方,还望指教,谢谢!!

话不多说,进入正题!

——————————————————————————————————————————

关于OpenCV3中读入图片后,显示为灰色的问题


环境:OpenCV 3.4.1 +VS2015+Windows x64

注意:根据其他博文的说法,VS2015与OpenCV v14版本对应,所以配置环境时请注意。


先上图看一看是什么情况吧:

opencv显示图片使用中文窗口乱码 opencv显示不了图片_显示灰色

此时图片显示失败,呈现灰色。

——————————————————————————————————————————

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);

博主说问题解决了,而我尝试的效果为(并未解决):

(附上该博文的连接)

opencv显示图片使用中文窗口乱码 opencv显示不了图片_显示灰色_02

当然博主也不清楚为什么他的尝试成功了,如果大家知道,还望告知。

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;
}

运行效果为:

opencv显示图片使用中文窗口乱码 opencv显示不了图片_读取图片_03

成功显示。

从代码上来看,应该是   system("pause");    和    waitKey(30);    两个函数的问题。

这我就搞不明白了,所以希望了解的各位大佬帮忙解答一下,万分感谢。

——————————————————————————————————————————

 

waitKey()函数


函数功能:


waitKey()函数的功能是不断刷新图像,频率时间为delay,单位为ms。


返回值为当前键盘按键值。


如果delay<0,等待时间无限长,返回值为按键值


经常程序里面出现   if( waitKey(10) >= 0 ) 是指10ms内按任意键进入此 if 块。