计算机视觉 OpenCV【一:读图片、视频与网络摄像机】

目录

一、头文件

二、读图片

三、读视频

四、读网络摄像机


一、头文件

我们在使用opencv进行读图片、视频与网络摄像机时,需要三个头文件:

#include <opencv2/imgcodecs/imgcodecs.hpp>

常用的从文件加载图片的imread,保存图片到文件的imwrite,从内存加载图片或者将图片编码后放到内存缓冲区的imencode/imdecode都在这个头文件中


#include <opencv2/highgui.hpp>

HighGUI模块包含媒体的输入输出、视频捕捉、图像和视频的编码解码、图形界面的接口等部分。​​​​​​​


#include <opencv2/imgproc.hpp>

图像处理模块,包括:图像滤波 几何图像变换 混合图像变换 直方图  结构分析及形状描述  运动分析及目标跟踪/特征/目标检测

 在实际应用中,我们使用总同文件即可:

#include <opencv2/opencv.hpp>

记着使用对应的命名空间:

using namespace cv; 

 

二、读图片

// Images //

void main() {
    //定义路径
	string path = "Resources//test.png";
	//Mat:opencv引入的矩阵数据类型,处理所有图像
	Mat img = imread(path);
	//展示图片,并给图片取名
	imshow("Image", img);
	//延迟,直到我们按下关闭按钮
	waitKey(0);
}

首先,用string类来定义你想要读取的图片的路径;

然后,创建一个Mat类(全称Matrix,矩阵,用于处理图像)的对象img;

imread是openCV里的一个函数,用于读取路径中的图像,并且以Mat的形式返回。

我们用img来接收这个图像。

最后,使用imshow函数来展示这个图像即可(“Image”为取名)

当然,如果这样就结束的话,图像会一闪而过;

所以我们在写一个延迟函数,直到我们按下关闭按钮,图像才会真正被关闭。 

 

运行截图:

三、读视频

视频是一系列图像,
我们需要遍历所有图像,捕获所有帧,并显示,
所以需要while循环。

void main() {
	string path = "Resources//test_video.mp4";
	//创建视频捕获对象
	VideoCapture cap(path);
	//Mat:opencv引入的矩阵数据类型,处理所有图像
	Mat img;
	while (true)
	{
		//使用视频捕获对象来显示图片
		cap.read(img);
		//展示图片,并给图片取名
		imshow("Image", img);
		//延迟10毫秒,直到我们按下关闭按钮
		waitKey(10);
		//会报异常,因为没有更多的图像要显示。
	}
}

首先创建路径;

然后创建视屏捕获对象cap,并且用path初始化,使这个对象指向的是路径对应的视频文件。

接下来,创建一个Matrix对象img;

C++: bool VideoCapture::read(Mat& image)
功能:该函数结合VideoCapture::grab()和VideoCapture::retrieve()其中之一被调用,用于捕获、解码和返回下一个视频帧

这是一个最方便的函数,对于读取视频文件或者捕获数据从解码和返回刚刚捕获的帧,假如没有视频帧被捕获(相机没有连接或者视频文件中没有更多的帧)将返回false。

其中image为帧图像输出,当连续使用read时,它会自动读取下一帧,并覆盖掉上一帧的图像

这里我们用cap返回刚刚捕获的帧,然后用Mat类实例化的对象img来接收,使之为一张图片,再用imshow进行展示;

然后显示10ms后,进入下一个while循环;

cap会自动读取下一帧。,直到while循环结束。

【注:这里视频播放完成后会报异常,因为没有更多的图像要显示。】

 

运行截图:

 

四、读网络摄像机

void main() {
	//相机ID:0
	VideoCapture cap(0);
	Mat img;
	while (true)
	{
		cap.read(img);
		imshow("image", img);
		waitKey(1);
	}
}

从摄像机中读取视频,这种情况下,我们会给出一个标识符,用于表示我们想要访问的摄像机,及其与操作系统的握手方式。

对于摄像机而言,这个标志符就是一个标志数字——如果只有1个摄像机,那么就是0,如果系统中有多个摄像机,那么只要将其向上增加即可。

然后依然是用cap来返回帧,并用img接收并显示,再用while循环指向下一帧。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值