Linux下配置OpenCV4.7.0的C++环境

  • Post author:
  • Post category:linux


opencv安装

1. 安装cmake

Ubuntu下opencv4需要cmake3以上的版本

参考



(27条消息) Linux系统Cmake安装教程_表情~大师的博客-CSDN博客



https://blog.csdn.net/qq_50972633/article/details/130444223


2. 安装所需要的依赖

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libcanberra-gtk-module
sudo apt-get install pkg-config

3. 下载OpenCV源码

下载地址:



Download | CMake (opencv.org)




解压

unzip opencv-4.3.0.zip

4. 编译并安装

4.1进入opencv源码目录中,新建build文件夹

4.2进入build文件夹,打开终端使用cmake生成makefile

cmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON  -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF  -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=O -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

这条命令会在build目录里生成对应配置的Makefile文件,可以看到配置信息之间是通过空格和-D来分割和标示的,配置了很多信息,我觉得比较重要的一个是 -D OPENCV_GENERATE_PKGCONFIG=ON,生成opencv.pc文件的配置(注意,opencv4生成的文件叫做opencv4.pc),另外就是 CMAKE_INSTALL_PREFIX=/usr/local这个关于安装路径的配置,这里的安装路径是在/usr/local下,这也是opencv的默认配置。

千万注意,最后的两个..千万不要删,这个指向CMakeLists.txt所在的目录

4.3等待编译完成之后执行make

sudo make install

可以使用make -j8多开线程加快编译速度

5 . 配置环境变量

sudo gedit /etc/ld.so.conf

在文件中加上一行 /usr/local/lib,因为makefile中默认opencv安装在该路径下。

运行ldconfig,使添加的库路径生效

sudo ldconfig

修改bash.bashrc

sudo gedit /etc/bash.bashrc 

在文件末尾添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

导出环境变量

export PKG_CONFIG_PATH

运行该脚本 生效新设的环境变量

 source /etc/bash.bashrc

在命令行中输入如下命令,检测opencv是否安装成功

pkg-config opencv --modversion

如果安装的是opencv4以上版本输入

pkg-config opencv4 --modversion

6. 写个小程序验证

首先在opencv源码目录中创建文件夹,把项目存进去

mkdir mytest #生成文件
cd mytest #进入文件夹

创建一个test.cpp

touch test.cpp

源码如下

#include<iostream>
#include <opencv4/opencv2/opencv.hpp>
#include<opencv4/opencv2/core.hpp>
#include<opencv4/opencv2/highgui/highgui.hpp>
#include <opencv2/videoio.hpp>
using namespace cv;
using namespace std;
 
int main()
{
	//打开电脑摄像头
	VideoCapture cap(0);
	if (!cap.isOpened())
	{
		cout << "error" << endl;
		waitKey(0);
		return 0;
	}
 
	//获得cap的分辨率
	int w = static_cast<int>(cap.get(CAP_PROP_FRAME_WIDTH));
	int h = static_cast<int>(cap.get(CAP_PROP_FRAME_HEIGHT));
	Size videoSize(w, h);
	double fps=25.0;
	//VideoWriter writer("RecordVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25, videoSize);
	VideoWriter writer;
	writer.open("RecordVideo.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, videoSize);

	Mat frame;
	int key;//记录键盘按键
	char startOrStop = 1;//0  开始录制视频; 1 结束录制视频
	char flag = 0;//正在录制标志 0-不在录制; 1-正在录制
 
	while (1)
	{
		cap >> frame;
		key = waitKey(100);
		if (key == 32)//按下空格开始录制、暂停录制   可以来回切换
		{
			startOrStop = 1 - startOrStop;
			if (startOrStop == 0)
			{
				flag = 1;
			}
		}
		if (key == 27)//按下ESC退出整个程序,保存视频文件到磁盘
		{
			break;
		}
 
		if (startOrStop == 0 && flag==1)
		{
			writer << frame;
			cout << "recording" << endl;
		}
		else if (startOrStop == 1)
		{
			flag = 0;
			cout << "end recording" << endl;
			
		}
		imshow("./picture", frame);
	}
	cap.release();
	writer.release();
	destroyAllWindows();
	return 0;
}
 

使用gcc编译

g++ -o edge test.cpp `pkg-config --cflags --libs opencv4` 

opencv卸载

1. 先到opencv编译安装的目录下

sudo make uninstall
cd ..
sudo rm -r build

2.上面最后一行命令有的文件夹不存在会有提示,但是不影响,只要把已安装的opencv的include和lib删掉就行,也可以手动删除,总之删除干净即可。可以参考下面的路径,自己找一下。

sudo rm -r /usr/local/include/opencv4 /usr/local/include/opencv /usr/include/opencv 
 /usr/include/opencv4 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv 
 /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*

3.检查是否删除完

pkg-config opencv --modversion
pkg-config opencv4 --modversion

常见天坑

1.pkg-config配置不全,找不到头文件和库路径

2.系统自带的有opencv2,版本冲突(删除即可)

3.安装成功后没有更新动态库

4.安装配置都成功后,编译示例时没有启用c++11(指令后面加入-std=c++11即可)

g++ -o edge test.cpp `pkg-config --cflags --libs opencv4` -std=c++11



版权声明:本文为qq_50972633原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。