(一)OpenCV简介

OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。

应用领域:

  • 人机互动
  • 物体识别
  • 图像分割
  • 人脸识别
  • 动作识别
  • 运动跟踪
  • 机器人
  • 运动分析
  • 机器视觉
  • 结构分析
  • 汽车安全驾驶

(二)OpenCV安装

1.安装包

①下载 OpenCV 4.6.0 数据包

国外官网下载地址:https://github.com/opencv/opencv/releases
国内gitee下载地址:https://gitee.com/OpenCVChina/opencv

在这里插入图片描述

②解压缩包

在home目录下将下载好的opencv4.6.0压缩包,移动到home目录下进行解压。
在这里插入图片描述

开始解压,执行解压命令

unzip opencv-4.6.0.zip

在这里插入图片描述

可以看到已经解压成功

③使用 cmake 安装 opencv

首先将解压后文件夹重命名为opencv,进入解压后的文件夹:opencv

cd opencv

使用命令安装cmake

sudo apt-get install cmake

安装完成后使用命令查看cmake是否安装成功

camke -version

在这里插入图片描述
可以看到已经安装成功

接下来安装依赖库

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

在这里插入图片描述

注意:根据自己虚拟机的依赖库安装情况可以对下面图片红色框中的依赖库进行自由删减

创建一个build文件夹

mkdir build

再cd到该目录下

cd build

使用 cmake 编译参数,或者使用第二条默认参数,都可以的。

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

注意:执行该条命令需要再bulid文件夹下

④使用 make 创建编译

继续在bulid目录下操作

sudo make -j4

注意: sudo make 是使用单线程编译,需要等待较长时间,使用sudo make -j4 是指使用4个线程进行编译

开始编译
在这里插入图片描述
编译完成
在这里插入图片描述

⑤安装

sudo make install

安装完成
在这里插入图片描述

2.环境配置

修改 opencv.conf 文件,文件目录:/etc/ld.so.conf.d/opencv.conf,使用gedit打开文件,添加OpenCV安装目录:/usr/local/lib

注意保存

sudo gedit /etc/ld.so.conf.d/opencv.conf

在这里插入图片描述
更新系统共享链接库

sudo ldconfig

配置 bash ,修改 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

执行更新命令

sudo updatedb

查看 opencv 的版本信息

pkg-config --modversion opencv

在这里插入图片描述
可以看到出现找不到opencv.pc的问题,这时候我们需要手动创建opencv.pc

opencv.pc

cd /usr/local/lib
sudo mkdir pkgconfig && cd pkgconfig
sudo gedit opencv.pc

添加相关配置:

# Package Information for pkg-config

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/opencv4

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.6.0
Libs: -L${exec_prefix}/lib -lopencv_gapi -lopencv_ml -lopencv_video -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_objdetect -lopencv_dnn -lopencv_stitching -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_photo -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}

再执行命令

pkg-config --modversion opencv

在这里插入图片描述

可以看到opencv安装成功

(三)OpenCV实例程序:图片处理

创建一个文件夹

mkdir opencvCode

创建程序test1.cpp

vim test1.cpp

写入程序代码

/*图像灰度化*/

#include<opencv4/opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

Mat src, gray;

int main()
{
	src = imread("image.jpg");

	if (src.empty())
	{
		cout << "没有读取到图像" << endl;
		return -1;
	}

	//cvtColor(src, gray, COLOR_RGB2GRAY);

	int row = src.rows;
	int col = src.cols;

	gray.create(row, col, CV_8UC1);

	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			gray.at<uchar>(i,j)= src.at<Vec3b>(i, j)[0] * 0.144 + src.at<Vec3b>(i, j)[1] * 0.587 + src.at<Vec3b>(i, j)[2] * 0.299;
		}
	}

	imwrite("test.jpg", gray);

	waitKey(0);
	return 0;
}



}

在这里插入图片描述

使用g++编译器进行cpp文件的编译

注意:如果虚拟机没有安装g++需要执行以下命令安装g++

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

输入命令进行cpp文件编译
在这里插入图片描述
生成可执行文件成功,运行可执行文件

./test1

在这里插入图片描述
看到灰度图像生成成功,查看效果:
在这里插入图片描述

(四)OpenCV实例程序:视频处理

1.虚拟机获取摄像头权限

使用快捷键 Win + R ,输入 services.msc ,并回车。
在这里插入图片描述

找到程序VMware Authorization Service,确保已经启动
在这里插入图片描述

进入VMware应用,找到虚拟机设置选项
在这里插入图片描述
选择 “ USB控制器 ” ,将 “ USB兼容性 ” 设置为 “ USB 3.1 ” ,并点击确定。
在这里插入图片描述

选择 “ 虚拟机 ” ,再选择 “ 可移动设备 ” ,再选择 “ Quanta USB2.0 VGA UVC WebCam ” ,最后点击 “ 连接 ” ,再弹出的窗口内点击 “ 确定 ” 。
在这里插入图片描述
虚拟机右下角这个摄像头图标有个小绿点,则连接成功。
在这里插入图片描述

2.播放视频

在上述opencvCode文件夹下,创建一个 test2.cpp 文件

sudo gedit test2.cpp

test2.cpp内容

#include <opencv4/opencv2/opencv.hpp>
using namespace cv;
int main()
{
	//从摄像头读取视频
	VideoCapture capture("hotpot.mp4");
	//循环显示每一帧
	while(1){
		Mat frame;//定义一个Mat变量,用于存储每一帧的图像
		capture >> frame;//读取当前帧
		if(frame.empty())//播放完毕,退出
			break;
		imshow("读取视频帧",frame);//显示当前帧
		waitKey(30);//延时30ms
	}
	system("pause");
	return 0;
}

代码讲解:

如果语句:VideoCapture capture(0),后面的参数设置为 0 ,则从摄像头读取视频并循环显示每一帧;如果设置为一个视频的文件名,比如:man.mp4 ,则会将视频读取并循环显示每一帧。
while 循环体中的 Mat 数据结构其实是一个点阵,对应图像上的每一个点,点的集合形成了一帧图像,有关 Mat 详解请看:OpenCV中Mat数据结构
语句:waitKey(30) ,中的参数单位是 ms 毫秒,也就是每一帧间隔 30 ms ,该语句时不能删除的,否则会执行错误,无法播放视频或录制视频。

编译test2.cpp文件

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

在这里插入图片描述
可以看到test2可执行文件已经生成,使用./test2运行查看效果
在这里插入图片描述

3.录制视频

在上述opencvCode文件夹下,创建一个 test3.cpp 文件

sudo gedit test3.cpp

test3.cpp:

/*********************************************************************
打开电脑摄像头,空格控制视频录制,ESC退出并保存视频RecordVideo.avi
*********************************************************************/
#include<iostream>
#include <opencv4/opencv2/opencv.hpp>
#include<opencv4/opencv2/core/core.hpp>
#include<opencv4/opencv2/highgui/highgui.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(cv::CAP_PROP_FRAME_WIDTH));
	int h = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_HEIGHT));
	Size videoSize(w, h);
	VideoWriter writer("RecordVideo.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'),25, 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;
}


编译test3.cpp文件

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

在这里插入图片描述

可以看到test3可执行文件已经生成,使用./test3运行查看效果

在这里插入图片描述
查看视频文件是否生成
在这里插入图片描述
OpenCV的安装和使用完成

(五)参考资料

Ubuntu18.04下OpenCV3.4.11的安装及使用示例

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐