目录

一.安装opencv

二 配置环境

三 实例

四 总结

五参考文献


一.安装opencv

1下载

在虚拟机内打开浏览器输入网址Release OpenCV 3.4.15 · opencv/opencv · GitHub,选择官网下载,找出opencv3.4.15下载。

2 解压

将下载好的zip文件移动到主目录进行解压。

3使用cmake安装opencv

在终端输入以下代码 

ubuntu下载opencv太慢 ubuntu上安装opencv_ide

 

然后在输入以下代码进行更新

ubuntu下载opencv太慢 ubuntu上安装opencv_ubuntu下载opencv太慢_02

然后安装cmake

 

ubuntu下载opencv太慢 ubuntu上安装opencv_ubuntu下载opencv太慢_03

 然后安装依赖库

ubuntu下载opencv太慢 ubuntu上安装opencv_opencv_04

 

ubuntu下载opencv太慢 ubuntu上安装opencv_ubuntu下载opencv太慢_05

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

4 进行编译

输入sudo make等待加载完毕。

5 进行安装

输入sudo make install进行安装等待到出现命令行。

二 配置环境

在终端输入

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

以文件,在文件打开的内容中另起一行,输入

include /usr/local/lib 

然后点击保存后关闭。

然后在终端里面输入 sudo gedit /etc/bash.bashrc 代码,对bash.bashrc文件进行修改,在文末加上

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

这两串后保存关闭。

在终端中输入

source /etc/bash.bashrc

检验

在终端中输入

 pkg-config opencv --modversion

然后如果出现以下就说明一切准备待续安装完成。

ubuntu下载opencv太慢 ubuntu上安装opencv_ubuntu下载opencv太慢_06

 

至此,opencv就安装完成了。 

三 实例

在主目录创建一个文件夹,在在文件中创建一个名为test1.cpp的文件

ubuntu下载opencv太慢 ubuntu上安装opencv_#include_07

然后在出现的里面输入以下代码

ubuntu下载opencv太慢 ubuntu上安装opencv_#include_08

 

 编译文件

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

输入以上代码,获得名为test1的程序,然后在文件夹中放入一张图片,然后在输入代码

./test

 运行程序,可获得一个后缀为png的文件。

ubuntu下载opencv太慢 ubuntu上安装opencv_ide_09

2打开摄像头显示

用以下代码

gedit test2.cpp

创建一个名为test2.cpp的文件然后在其中输入代码

ubuntu下载opencv太慢 ubuntu上安装opencv_opencv_10

 

保存后关闭。

对其进行编译,

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

获得名为test2的程序然后在终端输入./test2成功运行

ubuntu下载opencv太慢 ubuntu上安装opencv_opencv_11

 录制视频

用gedit test3.cpp创建另外一个文件,

并用代码

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

将其编译,然后使用./test3运行程序

ubuntu下载opencv太慢 ubuntu上安装opencv_ubuntu下载opencv太慢_12

 

获得如上一帧一帧的图片组成的视屏。 

如果要打开硬盘上的一个视频文件来播放, 则需要把程序中的

VideoCapture capture(0);

改为

 VideoCapture capture("xxxx.mp4");

在第6行的while循环中Mat是一个类,由两部分数据组成:矩阵头(包括矩阵尺寸、存储方法、存储地址等信息)和一个指向所有像素值的矩阵(根据所选存储方法不同,矩阵可以是不同的维数)的指针。

waitKey这个命令控制着imshow的持续时间,当imshow之后不跟waitKey时,相当于没有给imshow提供时间展示图像,就只有一个空窗口一闪而过,所以必须加waitKey。

此代码会在while循环中一直运行,如果试图用鼠标关闭图像显示窗口,会发现始终关不掉。需要用键盘Ctrl+C 强制中断程序,非常不友好。改进方法如下:

#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();
}

四 总结

 总之做这个实验的中途真是命运多舛的一次实验呀,多次因为各种原因报错,然后去一个一个的解决,最后在同学和网络的帮助下勉强完成了本次作业,过程漫长,熬过来了也真是一次进步哇。

五参考文献