目录
一.安装opencv
二 配置环境
三 实例
四 总结
五参考文献
一.安装opencv
1下载
在虚拟机内打开浏览器输入网址Release OpenCV 3.4.15 · opencv/opencv · GitHub,选择官网下载,找出opencv3.4.15下载。
2 解压
将下载好的zip文件移动到主目录进行解压。
3使用cmake安装opencv
在终端输入以下代码
然后在输入以下代码进行更新
然后安装cmake
然后安装依赖库
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
然后如果出现以下就说明一切准备待续安装完成。
至此,opencv就安装完成了。
三 实例
在主目录创建一个文件夹,在在文件中创建一个名为test1.cpp的文件
然后在出现的里面输入以下代码
编译文件
g++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`
输入以上代码,获得名为test1的程序,然后在文件夹中放入一张图片,然后在输入代码
./test
运行程序,可获得一个后缀为png的文件。
2打开摄像头显示
用以下代码
gedit test2.cpp
创建一个名为test2.cpp的文件然后在其中输入代码
保存后关闭。
对其进行编译,
g++ test2.cpp -o test2 `pkg-config --cflags --libs opencv`
获得名为test2的程序然后在终端输入./test2成功运行
录制视频
用gedit test3.cpp创建另外一个文件,
并用代码
g++ test3.cpp -o test3 `pkg-config --cflags --libs opencv`
将其编译,然后使用./test3运行程序
获得如上一帧一帧的图片组成的视屏。
如果要打开硬盘上的一个视频文件来播放, 则需要把程序中的
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();
}
四 总结
总之做这个实验的中途真是命运多舛的一次实验呀,多次因为各种原因报错,然后去一个一个的解决,最后在同学和网络的帮助下勉强完成了本次作业,过程漫长,熬过来了也真是一次进步哇。
五参考文献