现在自学OpenCV,当执行网上提供的以下源码时:
//缩放图像文件 //By MoreWindows (http://blog.youkuaiyun.com/MoreWindows) #include <opencv2/opencv.hpp> using namespace std; //隐藏控制台窗口 #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") int main() { const char *pstrImageName = "冲浪大师赛001.jpg"; const char *pstrSaveImageName = "冲浪大师赛001缩放图.jpg"; const char *pstrWindowsSrcTitle = "原图 (http://blog.youkuaiyun.com/MoreWindows)"; const char *pstrWindowsDstTitle = "缩放图 (http://blog.youkuaiyun.com/MoreWindows)"; double fScale = 0.314; //缩放倍数 CvSize czSize; //目标图像尺寸 //从文件中读取图像 IplImage *pSrcImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED); IplImage *pDstImage = NULL; //计算目标图像大小 czSize.width = pSrcImage->width * fScale; czSize.height = pSrcImage->height * fScale; //创建图像并缩放 pDstImage = cvCreateImage(czSize, pSrcImage->depth, pSrcImage->nChannels); cvResize(pSrcImage, pDstImage, CV_INTER_AREA); //创建窗口 cvNamedWindow(pstrWindowsSrcTitle, CV_WINDOW_AUTOSIZE); cvNamedWindow(pstrWindowsDstTitle, CV_WINDOW_AUTOSIZE); //在指定窗口中显示图像 cvShowImage(pstrWindowsSrcTitle, pSrcImage); cvShowImage(pstrWindowsDstTitle, pDstImage); //等待按键事件 cvWaitKey(); //保存图片 cvSaveImage(pstrSaveImageName, pDstImage); cvDestroyWindow(pstrWindowsSrcTitle); cvDestroyWindow(pstrWindowsDstTitle); cvReleaseImage(&pSrcImage); cvReleaseImage(&pDstImage); return 0; }
会出现一种情况,就是在VS2008下编译完全没有问题,但当在VS2008下运行时会出现错误!在命令提示符下以“程序名+图片名称”运行完成没有问题!
经过调试发现是cvLoadImage载入图片时出错,个人认为应该是图片路径的问题。查了网上的资料,解决方案很少。
最终自己把图片改为绝对路径,运行顺利通过!!
具体改法为: const char *pstrImageName = "d:\\冲浪大师赛001.jpg";
Oh,my ladygaga!!!