从网上找了个最简单的程序,读取并显示图片,竟然不能完成显示任务。然经努力,最终解决问题。
代码如下:
#include "cv.h"
#include "highgui.h"
#include <string>
#pragma comment(lib, "cv210.lib")
#pragma comment(lib, "cxcore210.lib")
#pragma comment(lib, "highgui210.lib")
#pragma comment( lib, "cvaux210.lib")
using namespacecv;//下面的所有cv 相关类型不用加上前缀了
using namespace std;
int main(int argc, char* argv[])
{
string file_name = "girl2.jpg";
Mat img =imread(file_name);//声明Mat 变量并调入照片
if(!img.data)//判断图片调入是否成功
return-1;//调入图片失败则退出
namedWindow("girl",CV_WINDOW_AUTOSIZE);// 创建窗口,并确定其为大小不可变类型窗口
imshow("girl",img);//显示图片。如果你不介意窗口大小可变,可以直接注释掉上一句。因为imshow 可以直接创建窗口
waitKey();//等待按键
return0;
}
运行程序,发现图片不显示。
调试发现
if(!img.data) // 判断图片调入是否成功
return -1; // 调入图片失败则退出
又从网上找了相同功能的代码如下:
int main( int argc, char** argv )
{
IplImage*pImg;//声明IplImage指针
//载入图像
if( argc ==2 && (pImg = cvLoadImage( argv[1],1)) != 0 )
{
cvNamedWindow( "Image", 1 );// 创建窗口
cvShowImage( "Image", pImg );// 显示图像
cvWaitKey(0);//等待按键
cvDestroyWindow( "Image" );//销毁窗口
cvReleaseImage( &pImg);// 释放图像
return 0;
}
return-1;
}
能完成任务。
继续调不能运行的代码。
怀疑文件路径有问题,改成绝对路径,依然不行。怀疑字符串问题,改成定义string,还是不行。
忽然想起试一下Release 版本,竟然能行。
乃想到可能Release版的库只能用于Release 版程序。
改成
#pragma comment(lib, "cv210d.lib")
#pragma comment(lib, "cxcore210d.lib")
#pragma comment(lib, "highgui210d.lib")
#pragma comment(lib, "cvaux210d.lib")
则可用于Debug 版程序,即对imread 这个函数而言,Debug版的库只能用于Debug版的程序。
结果如下: