《OpenCV2计算机视觉编程手册》初读

目录 Content
[hide]

机器人工程师也要懂 OpenCV

新浪微博上看到:

@存在如棘:最近委托供应商研发一台设备,用到PR修正机械定位精度,那软件工程师竟只会用康奈视的相机,我们提供的德国Basler的不会用。跟他说OpenCV,连听都没听过。机器视觉这领域涉足人还太少啊。

机器人工程师还是有必要涉足 OpenCV 领域的。于是 LT 入手了这本书《OpenCV2计算机视觉编程手册》,是《OpenCV 2 Computer Vision Application Programming Cookbook》的国内翻译版。

此书有别于其他的书的是介绍的是 opencv2 的内容,且是采用 C++ 的语言和 Qt 的开发环境。建议使用中文版快速入门,然后再对照英文版学习,毕竟英文版原汁原味。

OpenCV 2.4.3 和 VS2010

写这篇文章时,http://www.opencv.org.cn 最新的 OpenCV 是2.4.4,为了求稳,降一个版本,我下载了 2.4.3。发现和书中有些不同,2.4.x的 OpenCV 把头文件、库文件放在了build目录下,和书本里的 2.2 不同,这点要注意!按照书上 1.3 节的介绍,在 VS2010 里初步成功运行了一个demo! 在这个 demo 中,作者给出的方案是另建一个“属性表”,以便后面的项目重复使用配置,这个比网上人云亦云地直接修改项目属性好多了。

#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>

using namespace cv;

int main(){
	//read a image
	Mat image= imread("lena.jpg");
	// avoid mem error
	if (image.empty()){
		namedWindow("can not find image : lena.jpg");
		waitKey();
		return -1;
	}
	//creat image windows named "My Image"
	namedWindow("My Image");
	//show the image on window
	imshow("My Image",image);
	//wait key for 5000ms
	waitKey(5000);

	return 1;
}

myfirstopencvproject

OpenCV 2.4.3 和 Qt 5.1.0

随后又尝试了 Qt 环境的 demo,采用的是Qt 自带的原生 IDE 环境 Qt Creator。不过发现作者有些不负责了,关于 .pro 的配置描写的很笼统,让新手很容易迷糊。我参考了网上的资料,补充上我的 .pro 配置 ( 要根据 OpenCV 版本来配置哦,不要死搬)。

INCLUDEPATH += d:\opencv\build\include\
INCLUDEPATH += d:\opencv\build\include\opencv\
INCLUDEPATH += d:\opencv\build\include\opencv2\

CONFIG(debug,debug|release) {
LIBS += -Ld:\opencv\build\x86\vc10\lib \
    -lopencv_core243d \
    -lopencv_highgui243d \
    -lopencv_imgproc243d \
    -lopencv_features2d243d \
    -lopencv_calib3d243d
} else {
LIBS += -Ld:\opencv\build\x86\vc10\lib \
    -lopencv_core243 \
    -lopencv_highgui243 \
    -lopencv_imgproc243 \
    -lopencv_features2d243 \
    -lopencv_calib3d243
}

.pro 文件编辑后,要运行 qmake,生成 makefile,然后才可以顺利 build 成 exe文件。

#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>

using namespace cv;

int main(){    
    //read a image
    Mat image= imread("img.jpg");
    // avoid mem error
    if (image.empty()){
        namedWindow("can not find image : img.jpg");
        waitKey(5000);
        return -1;
    }
    //creat image windows named "My Image"
    namedWindow("My Image");
    //show the image on window
    imshow("My Image",image);
    //wait key for 5000ms
    waitKey(5000);

    return 1;
}

myQtConsoleProject对了,图片放在哪里呢?怎么找不到呢?其实放在项目的 makefile 同一目录下就好了,如 build-*目录内。

如果需要使用调试器,而 Qt Creator 提示调试器没有配置,可以去下载一个 Debugging Tools for Windows (32位的:文件名 dbg_x86_6.11.1.404.msi ),安装后在 Qt Creator 里面“自动检测”到即可。粗看本书,发觉作者是打算以后的例子都用 Qt Creator 来演示,所以还是把 Qt Creator 配置好为先。

Qt_cdb_

Qt Creator 与 Git

Qt Creator  中使用版本控制工具很方便,比如 Git,按照前面《Windows 环境下 Git 完美使用设置小结》介绍安装设置完 Git,只需要把 Git 的 bin 目录路径填入到 Qt Creator 的 Tool -> Option -> Version Control -> Git 选项页的 PATH 里面即可识别。然后就可以在 Tool 里面调用。

Qt-Git

OpenCV 版本问题引起的麻烦

本书作者写书时,用 OpenCV2.2 做的例子,但在IT界,明显是天上一天地上十年的趋势,如今已是 OpenCV2.4了,函数有可能被取消或者发生改变。我倒是觉得译者在翻译时,可以在书中指出这些变化,不失为一种有价值的做法。

Page25: QT5取消了 QString 的 toAscii() 方法,改用 toLatin1()
Page28: cv::cvtColor() 函数需要头文件 gpu.hpp imgproc.hpp (20130805更正)

opencv2_c1_done至此,LT 完成了本书第一章的实践练习 (源码附上备忘 OpenCVProjects_chapter01)。发觉 Qt 可以作为除了 MFC外,另一个值得花功夫研究的框架,它的跨平台特性,让人兴奋。

扩展阅读:

关键字:OpenCV, OpenCV2, Qt5, VS2010, Qt5.1.0, OpenCV2.4.6, Qt Creator

27 thoughts on “《OpenCV2计算机视觉编程手册》初读

  1. 请问你说:pro 文件编辑后,要运行qmake,生成makefile,然后才可以build成exe文件。 如何运行qmake啊?

  2. 对应的啊

    你看 这个是.pro里面的代码:
    INCLUDEPATH += d:\opencv\build\include\
    INCLUDEPATH += d:\opencv\build\include\opencv\
    INCLUDEPATH += d:\opencv\build\include\opencv2\

    CONFIG(debug,debug|release) {
    LIBS += -Ld:\opencv\build\x86\vc10\lib \
    -lopencv_core246d \
    -lopencv_highgui246d \
    -lopencv_imgproc246d \
    -lopencv_features2d246d \
    -lopencv_calib3d246d
    } else {
    LIBS += -Ld:\opencv\build\x86\vc10\lib \
    -lopencv_core246 \
    -lopencv_highgui246 \
    -lopencv_imgproc246 \
    -lopencv_features2d246 \
    -lopencv_calib3d246
    }

  3. 你好,我每次执行总是显示不能找到文件错误。例如,“:-1: error: cannot find -lopencv_core249d”。
    已经核查pro文件,与实际版本对应。已经执行了qmake,已经将bin设置系统路径path。

  4. 我的QT5.5 qmake后运行,提示错误如:
    D:\OpenCV\opencv_project\QT_Develop\test1\opencv_qt_test1\main.cpp:11: error: undefined reference to `cv::imread(std::string const&, int)’

    但是我的lib是对应加载好的。而且我的opencv在VS2013上市可以用的。
    请问这是为什么?

  5. 你好,我的怎么会出现这样的错误,请教下,谢谢了
    debug/main.o: In function `main’:
    C:\Users\Administrator.AZU9F7UB7BS30XB\Desktop\test\build-test2-Desktop_Qt_5_5_1_MinGW_32bit-Debug/../test2/main.cpp:21: undefined reference to `cv::imread(std::string const&, int)’
    debug/main.o: In function `ZN2cv3MatD1Ev’:
    D:/Program Files/opencv/build/include/opencv2/core/mat.hpp:278: undefined reference to `cv::fastFree(void*)’
    debug/main.o: In function `ZN2cv3Mat7releaseEv’:
    D:/Program Files/opencv/build/include/opencv2/core/mat.hpp:367: undefined reference to `cv::Mat::deallocate()’
    collect2.exe: error: ld returned 1 exit status
    Makefile.Debug:77: recipe for target ‘bin\test2.exe’ failed
    mingw32-make[1]: *** [bin\test2.exe] Error 1
    mingw32-make: *** [debug] Error 2

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.