在老猿CSDN的博文《构建VisualStudio2019+OpenCV4.3的C++ windows编译环境》中详细介绍了windows下怎么构建visual studio 2019+OpenCV4.3d的C++编译环境,换了国产电脑后,上述方法已经不能使用,需要寻求统信Linux下构建OpenCV的C++编译环境的方法,经过多次尝试,解决了一些遇到的坑,终于成功在统信UOS下构建了OpenCV的C++编译环境,下面就详细进行介绍。
版本的下载方法还是《构建VisualStudio2019+OpenCV4.3的C++ windows编译环境》介绍的方法,该方法不下载OpenCV的代码不要上GitHub,国内可以直接访问,比较方便。
老猿还是选择的4.3.0的版本,不过下载的操作系统版本不能是windows的版本,必须下载Linux下的版本,在网站上有zip版本和tar版本,老猿选择下载的zip版本,如图:
下载后,该zip文件名带空格和点,为了便于操作,老猿将其改名为“OpenCV430.zip”,解压该zip文件到自己想要安装的目录,默认解压到安装目录的“opencv-opencv-207f357”子目录,直接将该子目录改名为“OpenCV430”,在老猿的机器上完整的安装目录路径为:/home/openCV/OpenCV430
,前面2层目录就是选定的安装目录。
可以看到,该目录下有个CMakeLists.txt文件,这就是cmake的配置文件,有关cmake的介绍请参考老猿在CSDN的博文《信创之国产浪潮电脑+统信UOS操作系统体验2:安装visual studio code和cmake搭建C++开发环镜》的介绍,这说明OpenCV的编译需要借助cmake进行。
为了执行相关操作,减少权限问题的影响,进入linux终端操作模式,并执行:
sudo -i
用于以root用户身份登录到系统,后续操作都是在root用户下操作。
opencv安装依赖很多组件,如果没有预先安装这些组件中的部分,就会导致opencv安装后执行时报错,因此需要预先安装这些组件:
apt install build-essential
apt install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
apt install libjasper-dev
apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
apt install libxvidcore-dev libx264-dev
apt install libatlas-base-dev gfortran
apt install ffmpeg
这里补充说明几点:
1、依赖库的安装必须在执行opencv安装的cmake之前;
2、这里是列出了所有应该提前安装的库,但可能有部分库已经存在了,例如ffmpeg在老猿机器上原来就有,另外有部分库可能统信没有,如在老猿机器上无法安装libjasper-dev;
3、执行上述指令是前面以root用户登录为基础的,如果没有以root用户登录,则需要在这些指令前增加sudo。
为了顺利执行cmake,并为后续步骤准备好条件,需要按如下步骤进行cmake处理。
为了执行cmake,在/home/penCV/OpenCV430
下新建子目录build(原因请参考老猿在CSDN的博文《统信UOS Linux环境下安装OpenCV遇到的各种问题及填坑指南》)。
ADE(Automatic Differentiation Engine)是OpenCV中的一个模块,用于自动计算图像处理算法的导数。它可以根据输入和输出之间的关系,自动计算算法的梯度,从而实现自动微分。在OpenCV的编译过程中,如果使用了gapi模块,会自动下载并编译ADE,以支持自动微分功能。
在执行cmake过程中会自动到GitHub下载当前OpenCV版本对应的ADE文件,但如果安装机器所在的网络环境允许访问GitHub,则可以跳过该步骤,本步骤是专门针对机器环境无法访问GitHub进行的。
具体处理过程请参考老猿在CSDN的博文《机器环境无法访问GitHub情况下linux安装OpenCV执行cmake无法下载ADE文件v0.1.1f.zip》的介绍。
ADE处理后,就可以进入真正的cmake执行了。
进入build子目录后执行如下命令:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv430 -D OPENCV_GENERATE_PKGCONFIG=ON ..
这个指令指定设定了如下内容:
/usr/local/opencv430
,不指定的话默认安装目录为/usr/local
..
实际上述指令也可以使用:cmake …,不指定前面的两个变量参数,这样只是安装目录不同,同时无法生成opencv.pc文件(关于该文件请参考老猿在CSDN的博文《统信UOS Linux环境下安装OpenCV遇到的各种问题及填坑指南》的介绍)。
cmake执行完毕后最后给出信息如下:
-- Install to: /usr/local/opencv430
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/openCV/OpenCV430/build
cmake执行后和执行前,/usr/local目录其实没有变化,下面是老猿机器上的/usr/local`下目录内容情况:
其中include目录下内容为空,lib目录下有如下两个子目录:
这两个子目录下只有几个空目录,没有任何文件。
cmake处理完成之后,在build目录下准备好了进行make的相关文件和目录,如图:
可以看到Makefile已经生成,此时就可以执行make指令了。
make的执行很慢,但提供了多线程并行执行的能力,老猿机器CPU为8核,因此编译指令为:
make -j8
表示启动8个线程并行编译,编译过程花了17分钟,如果是单线程,可能要近2个小时。
编译完成后,在build目录下产生了大量文件和目录,bin目录下生成了一些执行文件,在lib目录生成了一些库文件,等等,此时可以执行bin目录下的一些程序进行测试。例如:
root@jwp:/home/openCV/OpenCV430/build/bin# ./opencv_version
4.3.0
编译完成后,就可以安装OpenCV文件和库了,执行指令为:
make install
make install指令的用途是将编译生成的可执行文件、库文件和其他必要的文件安装到系统中的指定位置,并在系统中进行配置,以便其他程序可以使用这些文件。
在老猿机器上安装的路径就是前面cmake配置的/usr/local/opencv430
,我们来看看该目录下的内容:
包括4个子目录,bin、include、lib、share,重点看看include目录:
include目录下有2级子目录,include和OpenCV4目录下都只有一个子目录名,真正的头文件都存放在opencv2子目录下。
通过前面的步骤,整个OpenCV4.3在老猿的机器上就都安装成功了,按理来说后续就可以在应用程序中调用OpenCV库文件和头文件进行OpenCV编程了,但不同环境配置对编译指令的参数要求不同,具体请参考老猿在CSDN的博文《统信UOS linux下opencv应用编译时的头文件和库文件路径查找设置方法》的介绍。
老猿推荐使用环境变量和opencv.pc文件来简化编译指令的参数,为此需要将头文件路径、库文件路径以及opencv.pc文件路径都写入到登录用户主目录的“.bashrc”文件中,在老猿机器环境中,对应登录用户“.bashrc”关于opencv配置的有关换行变量内容如下:
administrator@jwp:~$ pwd
/home/administrator
administrator@jwp:~$ tail -n 6 .bashrc
export CPLUS_INCLUDE_PATH=/usr/local/opencv430/include/opencv4:$CPLUS_INCLUDE_PATH
export C_INCLUDE_PATH=/usr/local/opencv430/include/opencv4:$C_INCLUDE_PATH
export LIBRARY_PATH=/usr/local/opencv430/lib:$LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/opencv430/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv430/lib:$LD_LIBRARY_PATH
administrator@jwp:~$
大家可以参考老猿的配置根据opencv安装路径调整上述配置内容,调整后重新登入终端生效,这样调整指令后,不用在g++编译指令中带-I和-L参数,也不用带-l参数来指定库文件,而是使用:\ pkg-config --libs opencv\
参数,对所有opencv的应用都生效。
如老猿编译test.cpp,使用指令如下:
administrator@jwp:~/E_DRIVER/opencv/test$ g++ -o test test.cpp `pkg-config --libs opencv`
administrator@jwp:~/E_DRIVER/opencv/test$
注意:
完成以上工作后,opencv库的安装完成,具备opencv应用调用API进行图像处理的能力,程序就可以编译执行了。
为了验证环境的可用性,可以用下面的代码进行验证:
#include
int main()
{
// 读取图片
cv::Mat image = cv::imread("文件目录用途.png");
// 检查是否成功读取图片
if (image.empty()) {
std::cout << "无法读取图片" << std::endl;
return -1;
}
// 创建窗口并显示图片
cv::namedWindow("Image", cv::WINDOW_NORMAL);
cv::imshow("Image", image);
// 等待按下任意键后关闭窗口
cv::waitKey(10000);
cv::destroyAllWindows();
return 0;
}
执行指令:g++ -o test test.cpp pkg-config --libs opencv
进行编译,老猿的pc文件未改名,因此使用opencv4,具体执行情况如下:
administrator@jwp:~/E_DRIVER/opencv/test$ g++ -o test test.cpp `pkg-config --libs opencv4`
administrator@jwp:~/E_DRIVER/opencv/test$ ./test
本文详细介绍了在统信UOS的linux操作系统环境下安装opencv库和构建opencv C++应用的编译环境的详细过程,通过下载安装包、调整cmake文件、执行cmake和make以及安装,调整环境变量等,最终构建了可以编译opencv C++应用程序的环境。
上述安装过程是老猿反复多轮测试之后总结出来的,其实在测试过程中中遇到了各种问题,通过解决这些问题,才最终成功,这些遇到的问题老猿已经记录,详细内容请参考老猿在CSDN的博文《统信UOS Linux环境下安装OpenCV遇到的各种问题及填坑指南》的介绍。
在编译安装opencv的过程中,看到这么庞大的工程通过cmake将其组织构建起来,检测并适配各种复杂环境,真的被这样的开源项目惊呆了,opencv是图像处理的利器,其项目的编译组织也值得吾辈之人好好学习。
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
更多关于统信操作系统及opencv的介绍的内容请参考专栏《国产信创之光》的其他文章。
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。