平台:Ubuntu20.04
CMAKE: cmake3.22.0 cmake-gui
文件路径:
~/opencv455/dev
~/opencv455/opencv-4.5.5
~/opencv455/opencv_contrib-4.5.5
注意,我的编译路径是dev(相当于大家常用的build文件夹),配置和编译文件都在这里。
配置Opencv
准备好后
$ cmake-gui
进入配置界面,配置如下图所示,主要是要选好"where is the source code"和"where to build the binary“这两个选框,然后点击Configure;
这时会弹出一个对话框,我一般选择Unix Makefiles,当然你可以选择ninja(要安装ninja)工具,
第一次配置好了会有很多红色,不要紧,后面任何时候再按一次Configure就好了,
BUILD_opencv_world
看到上面的配置文件后,一般我推荐设置好下面的几个参数
1、勾选上BUILD_opencv_world
这在有多个Opencv版本的库文件时尤其重要,这时可以通过链接libopencv_world.so.4.5.5这样的库区别其他版本的库函数。
2、在CMAKE_BUILD_TYPE后填上:Release
这一点只要检查一下就可以了,默认就是Release的。当然如果你想调试Opencv的源码,也可以编译Debug版本。
3、勾选上OPENCV_ENABLE_NONFREE
opencv提供了很多有意思的算法,这些算法商业上有版权,但源码是公开的,你可以编译进去。
很多算法通常我也用不到,但万一想测试一下呢,那就不用重新编译了。
4、在OPENCV_EXTRA_MODULES_PATH后填上opencv-contrib/modules的路径,比如我的是:/home/mc/opencv455/opencv_contrib-4.5.5/modules
这个附加功能模块的位置,提供相当多有意思的算法。如果你只需要opencv的核心模块的话,这个是可以不填写的。
Configure完了之后就可以正式配置了,按“Generate"那个按钮可以看到输出下面这样的字样,
Configure Done
Generate Done
编译安装
几乎没什么要说的,直接在~/opencv455/dev中开启一个终端,
$ cd dev #注意我前面创建的编译路径是opencv455/dev
$ nproc #查询线程数量
12
$ make -j12 #开始编译
$ sudo make install #安装
$ sudo make uninstall #如果想卸载
$ cd ..
$ sudo rm -r dev
这样,opencv455就编译安装完成了。
问题
(1)使用时,cv::namedWindow报错
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.5.5) /home/mc/opencv455/opencv-4.5.5/modules/highgui/src/window.cpp:1251: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvNamedWindow'
解决办法,
sudo apt install qt5-default (如果要用qt5)
sudo apt install libgtk2.0-dev
然后在cmake-gui中,选中
WITH_GTK (这个默认是选中的)
WITH_GTK_2_X
WITH_QT (没有选这个,貌似会有问题)
然后再配置编译项目就OK了。
参考资料