今天用opencv测试图像,发现使用cvLoadImage()再显示程序报错:
const char *psrcImgPath = "D:\code\1.jpg";
IplImage *psrcImg = cvLoadImage(psrcImgPath, CV_LOAD_IMAGE_UNCHANGED);
cvNameWindow("Input", CV_WINDOW_AUTOSIZE);
cvShowImage("Input", psrcImg);
运行时发生错误:0x0000013F0E114C处引发的异常: 0xC000005:读取位置0x00000008时发生访问冲突。
首先,0xC000005错误通常是指针为空指针,设置断点定位确实是空指针的问题,因而进一步查找psrcImg为空指针的原因。
psrcImg指针是由opencv自带函数得到的,函数调用没有问题,唯一可能出错是的就是cvLoadImage函数的第一个参数,即图像路径存在位置 。排除了图像确实存在的问题后,意识到可能是转义字符的问题:所有的\都需要转义字符\\来表示,即"D:\code\1.jpg"需要表示成“D:\\code\\1.jpg”,修改后程序正常运行。
这里也说明另一个问题,在涉及到读取图像的地方最好加上防空指针报错语句,即
if(psrcImg == NULL)
{
printf("Read file failure.\n");
exit(-1);
}