Ubuntu18.04下Opencv的安装以及使用


前言

我们将学习Ubuntu18.04系统下Opencv的安装以及一些使用。

一、Opencv的安装

因为Opencv的使用以及学习需要桌面版本的Ubuntu,如果已经安装可跳过此步骤,如果是Server版本需要下载桌面组件。

sudo apt-get update  //更新源
sudo apt-get install ubuntu-desktop //安装桌面组件
sudo reboot //重启虚拟机

安装网址:https://opencv.org/releases/
1、 在Ubuntu18.04中网页打开该网站。下载的话建议下载次新版本,相对稳定,网上资料较多。点击 Sources 下载。

在这里插入图片描述
2、 ctrl+alt+T进入终端,安装相应的依赖环境

sudo apt-get install build-essential 
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libjasper-dev libdc1394-22-dev

3、 将下载的安装包复制一份到home目录下,方便接下来的操作。将下载的压缩包解压

unzip opencv-4.5.5.zip

4、 进入解压后的文件,并在该目录下新建一个build文件夹

cd opencv-4.5.5
mkdir build

在这里插入图片描述
5、 进入build路径下cmake

cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

CMAKE_INSTALL_PREFIX: opencv的安装路径,是安装在/usr/local下的。
CMAKE_BUILD_TYPE: opencv的安装版本,这里默认安装Release。

在这里插入图片描述
6、 在build目录下make

sudo make -j2 //我这里是双线程,大家可以根据自己虚拟机的配置来

在这里插入图片描述
7、 在改目录下安装

sudo make install

8、 将opencv的库添加到系统路径,配置ld.so.conf文件

sudo vim /etc/ld.so.conf
//在打开的文件中加一行
include /usr/local/lib
并执行 sudo ldconfig  //使配置生效

在这里插入图片描述
9、 配置系统bash

sudo vim /etc/bash.bashrc
//再打开的文件末尾添加以下内容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
//添加完之后执行以下命令,使配置生效
source /etc/bash.bashrc

10、 安装完成!

二、Ubuntu18.04下opencv的应用实例

1、图片的显示

1、 在目录下创建一个code文件夹并进入该目录

mkdir code
cd code

2、 在code目录下使用vim编辑器编写一个test.cpp

#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
    
    
	CvPoint center;
    double scale = -3; 

	IplImage* image = cvLoadImage("lena.jpg");
	argc == 2? cvLoadImage(argv[1]) : 0;
	
	cvShowImage("Image", image);
	
	
	if (!image) return -1; 	center = cvPoint(image->width / 2, image->height / 2);
	for (int i = 0;i<image->height;i++)
		for (int j = 0;j<image->width;j++) {
    
    
			double dx = (double)(j - center.x) / center.x;
			double dy = (double)(i - center.y) / center.y;
			double weight = exp((dx*dx + dy*dy)*scale);
			uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);
			ptr[0] = cvRound(ptr[0] * weight);
			ptr[1] = cvRound(ptr[1] * weight);
			ptr[2] = cvRound(ptr[2] * weight);
		}

	Mat src;Mat dst;
	src = cvarrToMat(image);
	cv::imwrite("test.png", src);

    cvNamedWindow("test",1);  	imshow("test", src);
	 cvWaitKey();
	 return 0;
}

在这里插入图片描述
3、 执行以下命令

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

在这里插入图片描述
4、 执行以下命令

./test  //执行输出文件

在这里插入图片描述
可以看到图片已经特效展示

2、摄像头的的使用

(1)获取摄像头的权限

  • 在windows系统下 win+r,输入services.msc,找到VMware USB Arbitration S……服务,启动服务。
  • 在虚拟机中点开设置,将USB控制器的“USB兼容性”设置为usb3.0
    -虚拟机中选择“可移动设备”,再选“Quanta USB2.0 VGA UVC WebCam”,最后点击连接即可。

(2)摄像头调用录制视频

1、 创建一个.cpp文件,输入代码

#include<iostream>
#include <opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<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_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;
}

2、 输入以下命令编译生成可执行文件

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

在这里插入图片描述
可以发现正在使用电脑摄像头拍摄(因为我的摄像头坏了,所以没有拍摄效果)

(3)播放视频

1、 同理,也是需要一个.cpp 文件,将以下代码粘贴上去,编译运行即可。(在文件夹下要有视频)

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

在这里插入图片描述
可以正常播放视频!

三、参考资料

1、 https://blog.csdn.net/ssj925319/article/details/109231145?spm=1001.2014.3001.5501


总结

Opencv是一个很有趣的图像处理的开源库,在此之前也是在windows系统下用过,并没有在ubuntu系统下用过,没想过在ubuntu系统下挺麻烦的。当然,我们觉得麻烦也只是对linux的操作系统不熟悉罢了,毕竟我们都用惯了windows这种图形化的操作系统,希望通过不断的学习获取更大的进步!

猜你喜欢

转载自blog.csdn.net/wer4567/article/details/127033885