目录
1、什么是Opencv
① 简单介绍
Opencv是一个跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS上。他轻量级而且高校——由一系列的C函数和少量C++类构成。
② 下载
关于下载,大家可以参考一下以下的博客。下载Opencv是很需要耐心的,因为下载好需要一些组件和很多的时间。
2、简单使用
① 代码
main.cpp
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char **argv)
{
Mat image = imread("图片路径", 1); // 0代表灰度图,1代表彩色图;Mat相当于一个容器,用于储存图片
if (image.empty())
{
cout << "未能找到该图片……" << endl;
return -1;
}
namedWindow("测试", WINDOW_FREERATIO); // 可手动调节窗口的大小
imshow("测试", image); // 展示图片
waitKey(0); // 图片会停滞,一直会到某一个时间,或者手动关闭;0代表永不关闭,正数代表过x毫秒后自动关闭
return 0;
}
② 运行
先进入到源程序所在目录,输入指令:
g++ main.cpp -o main `pkg-config --cflags --libs opencv` // 注意符号,是“`”,不是“'”
生成可执行文件main,接着输入指令“./main”即可执行
③ 结果
④ 指令解析
g++ main.cpp -o main `pkg-config --cflags --libs opencv`
g++编译器:g++ + 文件名 + -o + 输出文件流名称 +` 支持包 `
其中pkg-config是一个linux下的命令,用于获得某一个库/模块的所有编译相关的信息(包括头文件和库的所有信息)
--cflags 是用来指定程序在编译时所需要头文件所在的目录
--libs则是指定程序在链接时所需要的动态链接库的目录
3、打开摄像头显示处理视频
① 代码
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 从摄像头读取视频
VideoCapture capture(0);
// 循环显示每一帧
while (true)
{
Mat pic; // 储存每一帧的画面
capture >> pic;
imshow("读取视频", pic);
waitKey(50); // 停顿50ms后继续读取图片
}
return 0;
}
② 改进
如果你想要关闭图像显示窗口,需要进入终端,按下ctrl+c才能停止,因此我们对此还可以做出改进。
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
VideoCapture capture(0);
while (true)
{
Mat pic;
capture >> pic;
imshow("读取视频", pic);
int ch = waitKey(50); // 每隔50ms获取键盘响应(按键)
if (ch == 27) // 在ASCII中,Esc = 27
break;
}
return 0;
}
③ 结果
④ 报错
在运行程序时,很有可能会出现以下报错:
翻译一下就是没有摄像头,因此我们还需要安装一些程序才能使用,比如说:Oracle VM VirtualBox Extension Pack,大家可以参照下面的文章:如何下载Oracle VM VirtualBox Extension Pack
4、使用Opencv打开硬盘上的视频
① 代码
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
VideoCapture capture("视频路径"); // 视频路径
if (!capture.isOpened())
return -1;
while (true)
{
Mat pic;
capture >> pic;
imshow("读取视频", pic);
int ch = waitKey(50);
if (ch == 27)
break;
}
return 0;
}
其实,要想播放本地视频,只需要将第7行中的“0”改为视频的地址即可
5、总结
总的来说,其实上面的东西并不是很难的,需要的是大家的耐心学习,只有基础打好了,才能学习更多的,更高级的东西。