大家好,又见面了,我是你们的朋友全栈君。
目录
一、安装opencv
(1)下载opencv-3.4.15数据包
(2)解压缩包
(3)使用 cmake 安装 opencv
(4)配置环境
(5)检验
二、实例使用
(1)打开图片
(2)打开摄像头显示处理视频
(3)录制视频
三、总结
四、参考文献
一、安装opencv
(1)下载opencv-3.4.15数据包
打开浏览器,进入下载地址Release OpenCV 3.4.15 · opencv/opencv · GitHub,选择Source code(zip)进行下载
(2)解压缩包
在解压缩包之前,将 opencv-3.4.15.zip 复制到 home 文件夹下,再解压缩。
然后使用如下命令进行解压
unzip opencv-3.4.15.zip
(3)使用 cmake 安装 opencv
进入解压后的文件夹:opencv-3.4.15
使用如下代码
cd opencv-3.4.15
然后进入root模式,进行更新
接着再执行如下条命令安装 cmake 。
sudo apt-get install cmake
然后再输入如下命令安装依赖库
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
再在在opencv3.4.15文件夹下新建build文件夹
mkdir build
之后再下载cmake的基础上进行编译
sudo make
等待编译完成之后在进行安装
sudo make install
(4)配置环境
用gedit打开/etc/ld.so.conf 在文件中加上一行 /usr/local/lib 其中/user/loacal是opencv安装路径也就是makefile中指定的安装路
命令如下
sudo gedit /etc/ld.so.conf
运行sudo ldconfig,,修改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
(5)检验
最后再输入
pkg-config opencv –modversion
至此opencv安装完成
二、实例使用
(1)打开图片
先创建一个文件夹用于存放代码,然后在文件夹之中存入一个test.cpp
gedit test.cpp
然后在编译文件
g test.cpp -o test`pkg-config –cflags –libs opencv`
然后再输入./test运行
如果发现此时并不能成功的运行,如果遇到这个问题的话是你的库出现了一些问题
具体解决方法参考如下
error while loading shared libraries: libopencv_highgui.so.3.4: cannot open shared object file解决方法 – 灰信网(软件开发博客聚合)
完成运行后我们会发现会新生成一张test.png
(2)打开摄像头显示处理视频
再在该文件夹下创建一个test1.cpp
代码如下
代码语言:javascript复制#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0);
while(1)
{
Mat frame;
capture >> frame;
imshow("读取视频帧",frame);
waitKey(30);
}
system("pause");
return 0;
}
再进行编译
g test1.cpp -o test1 `pkg-config –cflags –libs opencv`
最后运行程序
./test1
(3)录制视频
再创建一个test2.cpp文件
然后输入以下代码
代码语言:javascript复制/*********************************************************************
打开电脑摄像头,空格控制视频录制,ESC退出并保存视频RecordVideo.avi
*********************************************************************/
#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 test2.cpp -o test2 `pkg-config –cflags –libs opencv`
最后再./test2进行运行
如果要打开硬盘上的一个视频文件来播放, 则需要把程序中的
VideoCapture capture(0);改为VideoCapture capture(“xxxx.mp4”);
在第6行的while循环中Mat是一个类,由两部分数据组成:矩阵头(包括矩阵尺寸、存储方法、存储地址等信息)和一个指向所有像素值的矩阵(根据所选存储方法不同,矩阵可以是不同的维数)的指针。
waitKey这个命令控制着imshow的持续时间,当imshow之后不跟waitKey时,相当于没有给imshow提供时间展示图像,就只有一个空窗口一闪而过,所以必须加waitKey。
此代码会在while循环中一直运行,如果试图用鼠标关闭图像显示窗口,会发现始终关不掉。需要用键盘Ctrl C 强制中断程序,非常不友好。改进方法如下:
代码语言:javascript复制#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();
}
三、总结
在本次的实验中学会了opencv的用法,但在安装的过程中遇到许多的困难也花费了大量的时间,最后通过参考许多大佬才得以完成。
四、参考文献
ubuntu安装opencv的正确方法_陶陶name-CSDN博客_ubuntu安装opencv
error while loading shared libraries: libopencv_highgui.so.3.4: cannot open shared object file解决方法 – 灰信网(软件开发博客聚合) https://blog.csdn.net/pink_lemon/article/details/120632557
https://blog.csdn.net/public669/article/details/99044895
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/188375.html原文链接:https://javaforall.cn