0x00.本节课你将学到
0x01.OpenCV如何读取/显示图片
首先我们在项目文件夹中放好一张图片,我这里选择opencv常用的lena
将以下代码中的lena.jpg修改为自己的图片名(不一定是jpg,opencv支持很多图片格式)
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
Mat lena; // Opencv中使用Mat存储图像,Mat是矩阵
lena = imread("lena.jpg"); //读取当前目录下的lena.jpg,放到lena这个Mat中
imshow("lena image", lena);//展示lena这个Mat中的图像,窗口名为“lena image”
waitKey(0);//在弹出的窗口中等待键盘事件,按下之后继续往后执行
return 0;
}
运行结果如下
在弹出的窗口上按任意键即可退出程序
0x02.Opencv如何获取摄像头图像
Opencv中有一个VideoCapture,即视频捕获器
VideoCapture对象中有个open函数,open函数可以传入字符串或整数,字符串指视频名,整数指摄像头的编号,详情见以下代码
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
VideoCapture cameraCap; //视频捕获器
Mat image;
cameraCap.open(0); //打开默认摄像头
//cameraCap.open的参数可以是数字,数字为摄像头编号
//也可以是字符串,字符串是视频文件名,opencv支持大多数常见视频格式
cameraCap.read(image);//从cameraCap中取出一帧,放到image中
if (!image.empty())//如果image不是空图像
{
imshow("Camera", image);
waitKey(0);
}
return 0;
}
运行结果如下
0x03.Opencv如何动态显示摄像头图像
在上一个程序中,我们可以发现,我们一次read只获取了一帧图像,我们要是想让图像动起来,我们需要一个循环,源源不断从摄像头获取图像
我们还需要一个方法,让程序正常退出,在此我要简单介绍一下上面两个程序中都出现过的waitKey函数
waitKey函数是有返回值的,返回的内容是按下按键的按键值
waitKey的参数是delay,当delay为0时,waitKey函数就一直在暂停状态,直到用户按下按键。当delay>0时,waitKey会暂停delay毫秒
我们发现,waitKey可以用于判断何时中断程序,于是有了如下代码
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
VideoCapture cameraCap;
Mat image;
cameraCap.open(0);
do
{
cameraCap.read(image); //读取一帧
imshow("Camera", image); //显示刚刚读取的一帧
if (waitKey(20) == 'q') //如果在20ms内按下q,就进入if,否则就继续循环
{
break;
}
} while (!image.empty()); //当image不为空的时候
return 0;
}
运行结果如下