原文链接: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;
}
推荐阅读:
如果本文还没有完全解决你的疑惑,你也可以在微信公众号“桔子code”后台给我留言,欢迎一起探讨交流。