C/C++错误集锦(VS2015):代码编译无错误,opencv imread()获取的图片内容为空(编译告警warning C4566: 由通用字符名称“\u202A”表示的字符不能在当前代码页(936)中表示出来)

原文链接:http://www.juzicode.com/cpp-error-vs2015-compile-error-imread-warning-c4566-char-not-in-cp936

错误提示:

opencv通过imread()函数从图片文件读取图像,if (img.data==NULL)检查图片data属性为NULL,退出程序,不能正常显示图片,检查lena.jpg文件确实和运行的exe文件在同一个目录。

//VX:桔子code / juzicode.com
#include "opencv2/opencv.hpp"  
#include "iostream"
using namespace std;
using namespace cv;

int main()
{ 
	Mat img = imread("‪lena.jpg"); 
	if (img.data==NULL)
	{
		cout << "读出的图像为空" << endl;
		return -1;
	}
	imshow("lena", img);
	waitKey(0);
	return 0;
}

错误原因:

1、检查编译过程发现第9行存在告警,提示“warning C4566: 由通用字符名称“\u202A”表示的字符不能在当前代码页(936)中表示出来”,“\u202A”是个特殊的unicode字符,用来控制显示属性的,虽然不会明确显示,但是实际占用了一个字符。

我们可以通过cout方法将文件名称打印出来看看:

说明文件名称前确实多了个字符。

解决方法:

1、注释第9行,重新手动输入该行代码再编译运行:

//VX:桔子code / juzicode.com
#include "opencv2/opencv.hpp"  
#include "iostream"
using namespace std;
using namespace cv;

int main()
{ 
	//Mat img = imread("‪lena.jpg");//原来的一行注释掉
	Mat img = imread("lena.jpg"); //手动输入一行
	if (img.data==NULL)
	{
		cout << "读出的图像为空" << endl;
		return -1;
	}
	imshow("lena", img);
	waitKey(0);
	return 0;
}

推荐阅读:

  1. 编码: 一个隐藏了30多年的bug,Windows含蓄说过某通不行?(ASCII,GBK,UNICODE,UTF-8)

如果本文还没有完全解决你的疑惑,你也可以在微信公众号“桔子code”后台给我留言,欢迎一起探讨交流。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注