目录
- 一、opencv的安装
- 1.下载安装
- 2.环境配置
- 二、使用opencv打开一张图片
- 三、摄像头与视频录制
- 1.打开虚拟机摄像头
- 2.视频录制
- 四、总结
- 五、参考
一、opencv的安装
1.下载安装
1)下载获取Source
直接到官网:https://opencv.org/releases/
点击对应版本的Source即可下载
我下载安装的版本是opencv-3.4.12
下载好后将压缩包移动至Home文件夹下,然后使用以下命令进行解压
unzip opencv-3.4.12.zip
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
点击右上角save保存后关闭,看到出现警告信息,可不管
保存后执行如下命令使得配置路径生效
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-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;
}
然后在当前目录下准备一个图片文件,保证文件名与此处代码保持一致
使用g++命令编译test1.cpp文件
g++ te.cpp -o te `pkg-config --cflags --libs opencv`
编译后直接运行test1
./test1
然后可以在文件夹中看到了另一个由程序生成的图片文件
三、摄像头与视频录制
1.打开虚拟机摄像头
1)使用win+r命令并输入services.msc
找到VMware USB Arbitration Server并保证其已启动
2)在VMware Station中选择【Workstation】→【虚拟机】→【设置】
然后在【USB控制器】中选择USB 3.0
然后在【Workstation】→【虚拟机】→【可移动设备】→【xxx Cam】选择连接
虚拟机右下角摄像头标志小灯亮了即成功开启摄像头
3)打开终端,进入opencv-3.4.12/samples/cpp/example_cmake 目录下
执行以下命令
cmake .
make
./opencv_example
成功打开摄像头,并且左上角出现Hello OpenCV
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退出视频录制
生成.mp4视频文件
四、总结
此次实验难度并不高,但是opencv的安装极为繁琐,不仅需要从外网下载压缩包,还要使用命令行进行依赖包的下载安装,费时费力,且容易遇到大大小小的报错和失误,很容易出现完成安装流程而无法运行程序的情况,这种情况下若是无法找到失误,就只能全部重来。不过安装完成的opencv功能还是十分强大的,此次我就体验了opencv对图片和视频的处理功能。
五、参考
①ubuntu 18.04 安装 opencv(踩了很多雷终于整合成一个完整的成功版本) ②在 Ubuntu系统下安装 OpenCV 全过程. ③在Ubuntu18.04上安装opencv 3.4.1. ④Ubuntu18.04下OpenCV3.4.11的安装及使用示例. ⑤OpenCV在Ubuntu下的图像编程.