OpenCV简介
开源计算机视觉(OpenCV)是一个主要针对实时计算机视觉的编程函数库[1]。 最初由英特尔开发,后来由柳树车库(Willow
Garage)支持,后来由伊塞兹(Itseez)支持(后来被英特尔收购[2])。该库是跨平台的,根据开源BSD许可证免费使用。2D和3D功能工具包
运动估计
面部识别系统
手势识别
人机交互
移动机器人
动作理解
物体识别
分割和识别
实体影像立体视觉:来自两个摄像机的深度感知
运动中的结构(SFM)
运动跟踪
增强现实
为了支持上述一些领域,OpenCV包括一个统计机器学习库,其中包含:提升(Boosting)
决策树学习
梯度提升树
期望最大化算法
k最近邻算法
朴素贝叶斯分类器
人工神经网络
随机森林
支持向量机(SVM)
深层神经网络(DNN)[11]
链接: 来自.
安装
将安装包下载至虚拟机中,如果虚拟机下载过慢可以安装vmware tool,就可以直接复制到虚拟机中了!
若是不知道怎么安装VMware tool可以参考
链接: link.
解压
找到下载的地址,将其复制到主目录中
打开终端,输入代码
unzip opencv-3.4.1.zip
解压完成!
进入root模式
su即可
使用 cmake 安装 opencv
cd opencv-3.4.11
将终端更新一下
sudo apt-get update
sudo apt-get install cmake 安装cmake代码
完成
运行以下代码安装,过程漫长,耐心等待
sudo apt-get update
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev
mkdir my_build_dir
cd my_build_dir
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make
完成!
执行命令
sudo make install
sudo make install 执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到
sudo gedit /etc/ld.so.conf.d/opencv.conf
打开是一个空白文件
将代码复制进去,保存
/usr/local/lib
执行如下命令使得刚才的配置路径生效
sudo ldconfig
配置bash
sudo gedit /etc/bash.bashrc
再最后添加如下几行代码
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存
输入代码使生效
source /etc/bash.bashrc
更新一下
sudo apt-get update
所有配置都已经完成了,现在可以开始编程了!
在opencv-3.4.1下新建文件夹mytest
创建一个文件夹
cd opencv-3.4.1
mkdir mytest
创建一个cpp
touch test.cpp
开始编程
sudo gedit /test.cpp
代码如下:
代码源来自
链接: link.
保存并且编译
gcc test.cpp -o test `pkg-config --cflags --libs opencv`
我们发现并不能编译成功
我们返回去看我们的代码,
发现我们创建文件的时候就带了/,因此我们输入的时候就要加/,然后我们继续编译,还是有错,说明错误还没有改完,这时候咨询老师后将gcc改成g++即可编译
g++ /test.cpp -o test `pkg-config --cflags --libs opencv`
使用opencv打开摄像头
我们找到点击虚拟机,可移动设备,选择连接到主机,然后虚拟机突然死机,然后我查阅大佬的资料后发现虚拟机的设置没有正确!首先
Win+R输入这个
选中这个,打开,然后进入虚拟机,设置,
将USB 设置成3.0即可!
然后开始打开摄像头
cd opencv-3.4.1
mdkir mytest
touch test2.cpp
g++ /test2.cpp -o test2 `pkg-config --cflags --libs opencv`
./test2
就打开成功!
录制视频
gedit 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;
}
//获得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();
return 0;
}
g++ test3.cpp -o test3 `pkg-config --cflags --libs opencv`
./test3
这样就行了,
播放视频
进入文件夹,创建一个test2文件,然后输入代码:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
//从摄像头读取视频
VideoCapture capture("man.mp4");
//循环显示每一帧
while(1){
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame;//读取当前帧
if(frame.empty())//播放完毕,退出
break;
imshow("读取视频帧",frame);//显示当前帧
waitKey(30);//掩饰30ms
}
system("pause");
return 0;
}
将视频文件放入mystest,同时将文件名称改成man.mp4
运行就会出现一个视频,就是我放进去的那个。
因为只有4秒钟的视频,用手机拍摄的图片!
`
总结
opencv固然很有趣,功能也很多,但是实在是太麻烦了,稍微有一点不对去找问题实在要花太多时间了,参考资料也看了很多,问了同学很久才勉强做出来,太不容易了!
`