OpenCV基础知识

一、什么是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基础知识_第1张图片

这种错误一般都是图片文件名不对,要不就是项目路径下,没有这张图片

四、OpenCV 协议







。。。

你可能感兴趣的:(OpenCV基础知识)