opencv常见编译错误

 OpenCV的全称是:Open Source Computer Vision Library,于1999年由Intel建立,现在由Willow Garage提供支持。OpenCV是一个基于BSD许可证授权(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉的通用算法。

最新的版本是2.4.0,但是网上所有相关资料的都是2.3.1。作为初学者还是谨慎点好,这里演示用的是VS2010和OpenCV2.3.1。(VC++ 6.0已经不被OpenCV2.3.1支持)

OpenCV说白了就是个C库,不是什么有界面的软件。和我第一次听说这个软件还是很有出入的。我们要做的是配置好相应VS2010的开发环境,以使用之。好吧,现在进入正题:

 

%--------------------------------------华丽的分隔符-------------------------------------%

 

    网上很多教程都是告诉你怎么怎么设置,然后跑程序,我这里首先不设置,看看会出现什么错误,然后采用什么相应的设置可以解决。

实验程序:

/ test.cpp : 定义控制台应用程序的入口点。

//

 

 

#include "stdafx.h"

 

#include

 

using namespace std;

using namespace cv;

 

int main(int argc, char* argv[])

{

const char* imagename = "lena.jpg";

 

//从文件中读入图像

Mat img = imread(imagename);

 

//如果读入图像失败

if(img.empty())

{

fprintf(stderr, "Can not load image %s\n", imagename);

return -1;

}

 

//显示图像

imshow("image", img);

 

//此函数等待按键,按键盘任意键就返回

waitKey();

 

return 0;

}

 

 

错误1:

ClCompile:

1>  open_image.cpp

1>d:\program files\microsoft visual studio 10.0\my project\opencv\test1\test1\open_image.cpp(1): fatal error C1083: 无法打开包括文件:“stdafx.h”: No such file or directory

1>

1>生成失败。

 

错误原因:不使用预编译头所导致

使用预编译头后,头文件多了:stdafx.h、targetver.h;源文件多了stdafx.cpp,错误解除。

 

错误2:

 

1>ClCompile:

1>  stdafx.cpp

1>  test.cpp

1>d:\program files\microsoft visual studio 10.0\my project\opencv\test\test\test.cpp(10): fatal error C1083: 无法打开包括文件:“opencv2/opencv.hpp”: No such file or directory

1>

1>生成失败。

 

错误原因:c文件中#include 的头文件是VC++外编写的,需要告诉VC去什么地方寻找OpenCV的头文件

打开VC,选择菜单“工具”->“选项”->“项目和解决方案”->“VC++目录”->“包含文件”,包含 D:\Program Files\OpenCV2.3.1\build\include;D:\Program Files\OpenCV2.3.1\build\include\opencv;D:\Program Files\OpenCV2.3.1\build\include\opencv2

 

错误3:

1>ClCompile:

1>  所有输出均为最新。

1>  test.cpp

1>test.obj : error LNK2019: 无法解析的外部符号 "int __cdecl cv::waitKey(int)" (?waitKey@cv@@YAHH@Z),该符号在函数 _main 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 "void __cdecl cv::imshow(class std::basic_string,class std::allocator > const &,class cv::_InputArray const &)" (?imshow@cv@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV_InputArray@1@@Z),该符号在函数 _main 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall cv::_InputArray::_InputArray(class cv::Mat const &)" (??0_InputArray@cv@@QAE@ABVMat@1@@Z),该符号在函数 _main 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 "class cv::Mat __cdecl cv::imread(class std::basic_string,class std::allocator > const &,int)" (?imread@cv@@YA?AVMat@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z),该符号在函数 _main 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z),该符号在函数 "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ) 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QAEXXZ),该符号在函数 "public: void __thiscall cv::Mat::release(void)" (?release@Mat@cv@@QAEXXZ) 中被引用

1>D:\Program Files\Microsoft Visual Studio 10.0\my project\hello_world\Debug\test.exe : fatal error LNK1120: 6 个无法解析的外部命令

1>

1>生成失败。

 

错误原因:很显然用到了默认库函数没有的函数,这时候需要导入opencv的库函数,例如waitKey()

操作如下:

配置lib路径,也即告诉VC去什么地方寻找OpenCV的库文件。

在刚才下载的文件OpenCV-2.3.1-win-superpack.exe 里,已经为VC2008和VC2010预先编译好了动态库和静态库。因此我们不需要如早先版本那样,自己用cmake编译OpenCV

32位系统 & VC2010,库目录为:D:\Program Files\OpenCV2.3.1\build\x86\vc10\lib

将库目录输入菜单“工具”->“选项”->“项目和解决方案”->“VC++目录”->“库文件”

并在[链接器 LINKER]的[输入INPUT]中,为项目的Debug配置增加 [附加依赖项 Additional Dependencies]:opencv_calib3d231d.lib; opencv_contrib231d.lib; opencv_core231d.lib; opencv_features2d231d.lib; opencv_flann231d.lib; opencv_gpu231d.lib; opencv_highgui231d.lib; opencv_imgproc231d.lib; opencv_legacy231d.lib; opencv_ml231d.lib; opencv_objdetect231d.lib; opencv_ts231d.lib; opencv_video231d.lib (可根据实际需要删减)注意,请打开了新编辑窗口(即点击了“...”按钮)“附加依赖项”,并一条一条分别加入,一条一行(一个回车),(注意行末不要加";")否则会出现类似以下错误:1>LINK : fatal error LNK1104: 无法打开文件“…….lib”

 

 

错误4:

现在好了compile都通过了,但是run的时候:

发现:

opencv常见编译错误_第1张图片

 

错误原因:

设置环境变量

刚才设置的是动态库,因此还需要将OpenCV的dll文件所在的目录加入Path环境变量。dll文件目录如下

32位系统 & VC2010,dll目录为:D:\Program Files\OpenCV2.3.1\build\x86\vc10\bin

由于有些函数需要TBB,所以需要将tbb所在的目录也加入到环境变量Path中。TBB相关的DLL路径为:

32位系统 & VC2010:D:\Program Files\OpenCV2.3.1\build\common\tbb\ia32\vc10

 

成功。

执行效果如下:

opencv常见编译错误_第2张图片

%--------------------------------------华丽的分隔符-------------------------------------%

 

写到这也基本完事了,完整的一步步进行初始设置参见:http://www.opencv.org.cn/index.php/VC_2008_Express下安装OpenCV2.3.1

 

备注:

1. 我上述设置确实没问题,亲自测试,但是和教程中相差以下步骤:

   为项目的Release配置增加[附加依赖项 Additional Dependencies]:opencv_calib3d231.lib; opencv_contrib231.lib; opencv_core231.lib; opencv_features2d231.lib; opencv_flann231.lib; opencv_gpu231.lib; opencv_highgui231.lib; opencv_imgproc231.lib; opencv_legacy231.lib; opencv_ml231.lib; opencv_objdetect231.lib; opencv_ts231.lib; opencv_video231.lib (可根据实际需要删减)。暂时如果不进行这一步设置会出现什么错误,我也还没弄清楚,为了保险起见这里还是给设置上吧。

    2. 如果你下载的OpenCV2.4.0,上述各个文件尾缀也需要进行相应更改:例如opencv_core240.lib,自己查下库就行。

    3. 为电脑设置完环境变量后可能需要注销才能生效。

你可能感兴趣的:(opencv)