平台:32位Win7操作系统+VS2012+OpenCv2.4.4
64位Win7操作系统+VS2010+OpenCv2.4.6 也可以运行
实验目的:实现对一幅图像的显示,并对图像进行平滑处理
问题描述:
1)可以显示图像,执行报错
错误提示:
1>main.obj : error LNK2019: 无法解析的外部符号 _cvSmooth,该符号在函数 "void __cdecl exemple2(struct _IplImage *)" (?exemple2@@YAXPAU_IplImage@@@Z) 中被引用
1>F:\vs2010\Project\OpenText\Debug\OpenText.exe : fatal error LNK1120: 1 个无法解析的外部命令
开始在网上找了有关的解决方法,发现很多opencv友也遇到了这样的问题,无法解析,我按照他们的方法操作:属性管理器——>Microsoft.Cpp.Win32.user(点击右键,属性)——>链接器——>输入中的附加依赖项添加opencv_video244d.lib后,可惜仍然没有解决问题。所以我判断是cvSmooth这个函数调用来源出现问题。可是就是不知道如何解决。(最后解决了好像和opencv_video244d.lib没有关系,我把它从附加依赖项中删除了也不影响它的运行实现)。
我尝试着在包含目录里添加这些项目,像imgproc,video等项,操作:属性管理器——>Microsoft.Cpp.Win32.user(点击右键,属性)——>VC++目录——>包含目录中添加两条路径D:\OpenCV2.4.4\opencv\build\include\opencv2 D:\OpenCV2.4.4\opencv\build\include\opencv2\imgproc,就没有在报出上面的错误,可是新的错误又出现了。
2)系统报错
警示报错:显示系统报错,无法启动此程序,因为计算机中丢失opencv_imgproc244d.dll。尝试重新安装该程序以解决此问题。
丢失opencv_imgproc244d.dll。想到之前也遇到过这样的问题,一直到没有解决,以为是要下载一个.dll文件,可惜在网上找了好久都没有找到,可能使我用的vs2012比较新的版本,所以没有。实在没有办法只能去安装文件夹中去找找看,结果还真被我找到了。嘻嘻…………开心。D:\OpenCV2.4.4\opencv\build\x86\vc10\bin,于是我把opencv_imgproc244d.dll复制到C:\Windows\System32,问题就解决了,图像可以正确的输出了。
在64位Win7操作系统+VS2010+OpenCv2.4.6 下,我没有把(opencv_imgproc244d.dll复制到C:\Windows\System32)一样可以运行。要是不行,可能是opencv库没有配置好。
代码附件:
#include "stdafx.h"
#include "highgui.h"
#include "cv.h"
void example2_4(IplImage* image)
{ cvNamedWindow("Example4-in");
cvNamedWindow("Example4-out");
cvShowImage("Example4-in",image);
IplImage* out=cvCreateImage(
cvGetSize(image),
IPL_DEPTH_8U,
3
);
cvSmooth(image,out,CV_GAUSSIAN,3,3);
cvShowImage("Example4-out",out);
cvReleaseImage(&out);
cvWaitKey(0);
cvDestroyWindow("xEample4-in");
cvDestroyWindow("Example4-out");
}
int main(int argc, char ** argv)
{
IplImage* img=cvLoadImage("food.jpg");
cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
cvShowImage("Examples1",img);
example2_4(img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("Example1");
}
试验结果展示: