最近出差,看不进去论文,遂干点杂活吧,比如搭个环境....考虑到以后肯定会用linux,先装个ubuntu熟悉一下,搭个OpenCV。
Step1:
http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html
这一步可能出现ippicv failed,解决方法是在CMAKE命令行中加入-D WITH_IPP=OFF。
这一步骤干了这几件事:下载opencv,解压,用cmake生成build前的makefile,用make命令对opencv源码进行build,生成各种库。
Step2:
编写测试程序opencvtest.cpp(在这一步前可能还需要配置环境变量,自行搜索吧)
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
int main()
{
Mat img = imread(“1.jpg”);
imshow("opencvtest",img);
waitKey(0);
return 0;
}
在当前文件夹下放一个"1.jpg"
Step3:
编译和执行。编译就是用g++。都说clang好,以后再说吧。
$ g++ `pkg-config --cflags opencv` -o opencvtest opencvtest.cpp `pkg-config --libs opencv`
$ ./opencvtest
编译肯定需要头文件和库文件啊,那两个pkg-config就是干这个事情的。
如果运行pkg-config --cflags opencv,返回的是:
-I/usr/local/include/opencv -I/usr/local/include
就是g++需要的include文件夹。注:CFLAGS and CXXFLAGS are either the name of environment variables or of Makefile variables that can be set to specify additional switches to be passed to a compiler in the process of building computer software.
而运行pkg-config --libs opencv,返回的是:
-L/usr/local/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
是build时用到的库。
更多关于pkg-config的内容,见http://www.cnblogs.com/youxin/p/4271978.html。
如果你嫌这一句g++太长了,也可以写成bash文件,具体见https://help.ubuntu.com/community/OpenCV中的compile_opencv.sh。
另外,这一篇写的也挺好的,可参考:http://www.cnblogs.com/lyutian/p/4425956.html
Step4:
总用g++编译也不是个事,装个IDE吧,这里选QT:http://download.qt.io/official_releases/,选个linux+android版本的,下载后安装(run文件需要右键->属性->执行->选为可执行)
为了方便debug单步调试,敲命令:
sudo gedit /etc/sysctl.d/10-ptrace.conf
将其中的一句修改为:kernel.yama.ptrace_scope = 0
重启系统。
再进入QT,新建工程。在工程的prop文件中输入include和lib路径(这里lib不全,你可以自己填)
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
LIBS +=/usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_core.so \
/usr/local/lib/libopencv_imgproc.so
在main.cpp中写入上一步的测试代码,将"1.jpg"放到build_xxx_desktop_debug路径下(这个路径在QT->项目->构建目录 中看到),否则在imshow那一步会报错:
"the inferior stopped because it received a signal from the operating system. Signal name: sigabrt",这是因为imread没读到jpg文件嘛。
OK,现在可以在QT中运行测试代码了,还可以单步调试。但论IDE,个人还是觉得VS强大的多。
几个遇到的问题:
1.编译过程中:error: ‘rectangle’ was not declared in this scope
A:include "opencv2/imgproc.hpp"
2.linux下没有itoa和_itoa,出现编译错误
A:用sprintf(string,"%d",int)代替
3.在debug过程中传递argv参数给main
在QT界面选择“项目”->"构建和运行"->“运行”->Command line arguments
4.debug时进入汇编代码而不是C++
在汇编情况下,选择“调试”->选中“依照命令操作”->再取消“依照命令操作”,即可