目录

  • 一、opencv的安装
  • 1.下载安装
  • 2.环境配置
  • 二、使用opencv打开一张图片
  • 三、摄像头与视频录制
  • 1.打开虚拟机摄像头
  • 2.视频录制
  • 四、总结
  • 五、参考


一、opencv的安装

1.下载安装

1)下载获取Source

直接到官网:https://opencv.org/releases/

点击对应版本的Source即可下载

我下载安装的版本是opencv-3.4.12

opencv 嵌入式平台 嵌入式linux opencv_视频录制

下载好后将压缩包移动至Home文件夹下,然后使用以下命令进行解压

unzip opencv-3.4.12.zip

opencv 嵌入式平台 嵌入式linux opencv_bash_02

2)安装依赖包
首先更新源

sudo apt update

安装相关包

sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libjasper

若是报错:无法定位到 libjasper软件包
则依次执行以下命令

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" sudo apt update sudo apt install libjasper1 libjasper-dev

安装常用图像工具包

sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev

安装视频I/O包

sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

安装gtk2.0

sudo apt install libgtk2.0-dev

优化函数包

sudo apt-get install libatlas-base-dev gfortran

3)用cmake从source构建opencv
进入解压的文件夹,创建一个文件夹build并进入

mkdir build
cd build

然后再在文件夹build中执行此命令

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

接下来就是开始编译了

sudo make

也可以执行sudo make -j3进行多线程编译
j后面的数字是想要使用的线程数量
编译时间较长,耐心等待: )

编译结束后

sudo make install

完成后,opencv就安装好了

2.环境配置

修改 opencv.conf 文件

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

打开后,添加 opencv 库的安装路径:/usr/local/lib

opencv 嵌入式平台 嵌入式linux opencv_opencv 嵌入式平台_03


点击右上角save保存后关闭,看到出现警告信息,可不管

opencv 嵌入式平台 嵌入式linux opencv_opencv 嵌入式平台_04


保存后执行如下命令使得配置路径生效

sudo ldconfig

配置 bash ,修改 bash.bashrc 文件

sudo gedit /etc/bash.bashrc

打开文件后在文末加入以下两行代码

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

opencv 嵌入式平台 嵌入式linux opencv_视频录制_05


保存后退出,然后执行以下命令使配置生效

source /etc/bash.bashrc

然后更新

sudo updatedb

完成opencv-3.4.12的安装

二、使用opencv打开一张图片

创建一个c++文件test1.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("test.png");
	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("test1.png", src);

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

然后在当前目录下准备一个图片文件,保证文件名与此处代码保持一致

opencv 嵌入式平台 嵌入式linux opencv_opencv 嵌入式平台_06


使用g++命令编译test1.cpp文件

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

编译后直接运行test1

./test1

opencv 嵌入式平台 嵌入式linux opencv_linux_07


然后可以在文件夹中看到了另一个由程序生成的图片文件

opencv 嵌入式平台 嵌入式linux opencv_linux_08

三、摄像头与视频录制

1.打开虚拟机摄像头

1)使用win+r命令并输入services.msc

opencv 嵌入式平台 嵌入式linux opencv_linux_09


找到VMware USB Arbitration Server并保证其已启动

opencv 嵌入式平台 嵌入式linux opencv_linux_10


2)在VMware Station中选择【Workstation】→【虚拟机】→【设置】

opencv 嵌入式平台 嵌入式linux opencv_bash_11


然后在【USB控制器】中选择USB 3.0

opencv 嵌入式平台 嵌入式linux opencv_linux_12


然后在【Workstation】→【虚拟机】→【可移动设备】→【xxx Cam】选择连接

opencv 嵌入式平台 嵌入式linux opencv_视频录制_13


虚拟机右下角摄像头标志小灯亮了即成功开启摄像头

opencv 嵌入式平台 嵌入式linux opencv_#include_14


3)打开终端,进入opencv-3.4.12/samples/cpp/example_cmake 目录下

opencv 嵌入式平台 嵌入式linux opencv_视频录制_15


执行以下命令

cmake .
make
./opencv_example

成功打开摄像头,并且左上角出现Hello OpenCV

opencv 嵌入式平台 嵌入式linux opencv_视频录制_16

2.视频录制

1)创建test2.cpp,代码如下:

/*********************************************************************
打开电脑摄像头,空格控制视频录制,ESC退出并保存视频 video.mp4
*********************************************************************/
#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("video.mp4", 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;
}

执行以下命令编译运行

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

运行后即开启摄像头,然后按空格开始视频录制,按ESC退出视频录制

opencv 嵌入式平台 嵌入式linux opencv_bash_17


生成.mp4视频文件

opencv 嵌入式平台 嵌入式linux opencv_opencv 嵌入式平台_18

四、总结

此次实验难度并不高,但是opencv的安装极为繁琐,不仅需要从外网下载压缩包,还要使用命令行进行依赖包的下载安装,费时费力,且容易遇到大大小小的报错和失误,很容易出现完成安装流程而无法运行程序的情况,这种情况下若是无法找到失误,就只能全部重来。不过安装完成的opencv功能还是十分强大的,此次我就体验了opencv对图片和视频的处理功能。

五、参考

①ubuntu 18.04 安装 opencv(踩了很多雷终于整合成一个完整的成功版本) ②在 Ubuntu系统下安装 OpenCV 全过程. ③在Ubuntu18.04上安装opencv 3.4.1. ④Ubuntu18.04下OpenCV3.4.11的安装及使用示例. ⑤OpenCV在Ubuntu下的图像编程.