一.opencv的安装和配置
1.官网下载
2.移动至主目录并解压
- 其中解压可用
unzip opencv-3.4.11.zip
也可以直接在主目录解压
3.安装cmake
- 输入指令
sudo apt-get install cmake
4.安装依赖库
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 libtiff-dev libjasper-dev libdc1394-22-dev
5.新建build文件并进入
6.编译
- 执行cmake
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
- 执行make(配置到100%即成功)
sudo make
sudo make install
6.配置opencv编译环境
- 用gedit打开/etc/ld.so.conf
sudo gedit /etc/ld.so.conf
- 文件中加入/usr/loacal/lib
sudo ldconfig
- 修改bash.bashrc文件
sudo gedit /etc/bash.bashrc
- 在文件末尾加入
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
7.检验
cd opencv3
cd samples
cd cpp
cd example_cmake
cmake .
make
./opencv_example
- 出现如上Hello OpenCV则配置成功
二.opencv的使用
1.图像处理
(1).新建文件夹mytest
(2).选择图片保存在opencv-3.4.11文件夹中
(3).创建test.cpp并输入代码
(4).保存,编译,运行
(5).结果如图
2.使用摄像头
(1).配置虚拟机摄像头USB
- Win+R打开cmd 输入services.msc把虚拟机的USB服务打开
- 虚拟机设置中USB调整为USB3.1
(2).安装cheese
sudo apt-get install cheese
- 用
cheese
命令打开摄像头
3.播放视频
(1).创建test2.cpp文件
nano test2.cpp
- 代码:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture("cs.mp4");
while(1)
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame;//读取当前帧
if(frame.empty())//播放完毕,退出
break;
imshow("读取视频帧",frame);//显示当前帧
waitKey(30);//掩饰30ms
}
system("pause");
return 0;
}
(2).编译test2.cpp文件
(3).运行test2
./test2
4.打开摄像头录制视频
(1).创建test3.cpp文件
nano test3.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;
}
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;
char flag = 0;
while (1)
{
cap >> frame;
key = waitKey(100);
if (key == 32)
{
startOrStop = 1 - startOrStop;
if (startOrStop == 0)
{
flag = 1;
}
}
if (key == 27)
{
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).编译test3.cpp文件
(3).运行test3
./test3
- 空格开始录制,esc退出录制