一、什么是OpenCV
OpenCV 其实就是一堆 C 和 C++语言的源代码文件,这些源代码文件中实现
了许多常用的计算机视觉算法。
由于 OpenCV 中源代码文件巨多,根据算法的功能,将这些源文件分到多个
模块中:core、imgproc、highgui 等。将每个模块中的源文件编译成一个库文件
(如 opencv_core.lib、opencv_imgproc.lib、opencv_highgui.lib 等),用户在使用时,
仅将所需的库文件添加到自己的项目中,与自己的源文件一起连接成可执行程序
则可。
二、什么是命令行参数
C/C++语言中的 main 函数,经常带有参数 argc,argv,如下:
int main(int argc, char** argv)
或者
int main(int argc, char* argv[])
argc: 表示命令行输入参数的个数(以空白符分隔)
argv:中存储了所有的命令行参数
假如你的程序是 hello.exe,如果在命令行运行该程序,首先应该在命令行下用 cd 命令进入到 hello.exe 文件所在目录,
运行命令为:hello.exe hello world
那么,argc 的值是 3,argv[0]是"hello.exe",argv[1]是"hello ",argv[2]是"world"
三、常见的编译错误
1、找不到头文件
找不到头文件往往会提示如下错误:
hello.cpp(2): fatal error C1083: Cannot open include file: 'opencv2/opencv.hppp': No such file or directory
找不到头文件一般有两个原因:
一个是头文件的文件名拼写错误;
或者未将头文件所在路径添加到开发环境中。
上例中的错误是文件名拼写错误,opencv2/opencv.hpp 被错误地拼写为 opencv2/opencv.hppp。如果文件名拼写正确,编译器还是找不到头文件,则需要将头文件所在路径添加到相应的变量中。
需要在项目属性(Project Property)对话框中设置头文件路径。具体位置在对话框“VC++ Directories”里面的“Include Directories”中
2、拼写错误
在编程中,拼写错误也是一类常见错误。将 imread函数错误地拼成 imreadd,
编译器会提示错误:
hello.cpp(9): error C3861: 'imreadd': identifier not found
这句错误提示的意思是说无法找到 imreadd 标识符,因此我们需要仔细检查imreadd 找不到的原因。假如你真的有一个函数是 imreadd,但是找不到,可能的原因是声明 imreadd 的头文件未使用 include 语句包含到源文件中。
3、常见链接错误
连接过程中最常见的错误如下:
1>hello.obj : error LNK2019: unresolved external symbol "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) referenced in function _main
这个错误信息里最关键的词是“unresolved external symbol”,更具体的意思
是在 main 函数中使用了 imread 函数,但是无法从外部找到 imread。imread 函
数是 OpenCV 的函数,不是用户自己实现的函数。opencv.hpp 头文件告诉编译器
有个 imread 函数可以用,编译通过;但是到了连接时,连接器却找不到 imread
的具体实现,故出错。
解决这个问题:
在属性管理器栏中,展开目录,选中Debug|x64中的Microsoft.Cpp.x64.user,并右键点击属性进入属性界面,找到链接器 -->输入 -->附加依赖库,添加依赖的库文件即可。
4、运行时错误
这种错误一般都是图片文件名不对,要不就是项目路径下,没有这张图片
四、OpenCV 协议
。。。