【OpenCV入门】读取图片/视频/调用摄像头


我的个人博客:谋仁·Blog
微信公众号:谋仁的麻袋


读取图片

  • 预期效果:从指定路径读取一张图片并显示出来。
  • 源代码:
#include <iostream>//输入输出流
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;//c++标准库
#ifdef _DEBUG
#pragma comment(lib,"opencv_world453d.lib")
#else
#pragma comment(lib,"opencv_world453.lib")
#endif // _DEBUG

int main() {
    
    
	string path = "Resources/test.png";//相对路径
	Mat outImg=imread(path);//从指定路径读取图片信息
	imshow("图片", outImg);//将图片显示出来
	waitKey(0);//参数为0时暂停时间是无穷
	return 0;
}

必要的补充:

  • cv::Mat cv::imread(const cv::String &filename,int flags);
    作用:从一个文件中加载一张图片。
    输入参数1:const string类型,图片文件的路径(带文件名及后缀)。
    输入参数2:int类型,读取的格式,具体参考这里
    返回:Mat对象(Mat类型是用于存储图像信息的矩阵)。
  • void cv::imshow(const cv::string &winname,cv::InputArray mat);
    作用:将图片显示在窗口中。
    输入参数1:const string类型,窗口的名称。
    输出参数2:mat类型,待输出的图片。
    返回:空
  • int cv::waitKey(int delay);
    作用:延时函数,如果延时期间有按键按下则立即结束并返回按键的ASCII码。当参数delay=0,程序一直延时,直到有按键按下去;当参数delay>0,则程序延时delay毫秒,并同时等待按键按下。
    输入参数:int类型,延时的时长;/或选择0一直延时。
    返回:返回按键的ASCII码。

读取视频文件

视频就是由一张张图片组成的,所以在读取图片的基础上套一个while循环,不断地获取新的图片并显示出来就可以完成视频的读取了。

  • 预期效果:从指定路径读取一个视频文件(视频的图像,不包括音频),并播放出来。
  • 源代码:
#include <iostream>//输入输出流
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;//c++标准库
#ifdef _DEBUG
#pragma comment(lib,"opencv_world453d.lib")
#else
#pragma comment(lib,"opencv_world453.lib")
#endif // _DEBUG

int main() {
    
    
	string path = "Resources/test_video.mp4";
	VideoCapture testVideo(path);//从视频文件的路径读取
	Mat videoImg;//接收每一帧读取的图像
	while (true) {
    
    //循环不断获取新的图片并显示出来
		testVideo.read(videoImg);//读取摄像头的照片并存放在Mat类型的videoImg中
		imshow("Video", videoImg);//将图片显示出来
		waitKey(3);//相邻每帧图片间隔时间(单位:ms
	}
	return 0;
}

必要的补充:

  • class cv::VideoCapture
    作用:对视频进行读取操作以及调用摄像头。
    实例化以后传入string类型的视频文件路径以读取文件;传入int类型接入的指定摄像头的ID以调用指定摄像头。

调用摄像头

在读取视频程序的基础上,将VideoCapture类型的实例传进string类型路径换成int类型的摄像头ID后就完成了调用摄像头操作。

  • 预期效果:调用指定摄像头,窗口中显示摄像头拍到的内容。
  • 源代码:
#include <iostream>//输入输出流
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;//c++标准库
#ifdef _DEBUG
#pragma comment(lib,"opencv_world453d.lib")
#else
#pragma comment(lib,"opencv_world453.lib")
#endif // _DEBUG

int main() {
    
    
	VideoCapture testVideo(0);//调用0号摄像头
	Mat videoImg;
	while (true) {
    
    //循环不断获取新的图片并显示出来
		testVideo.read(videoImg);//读取摄像头的照片并存放在Mat类型的videoImg中
		imshow("Video", videoImg);//将图片显示出来
		waitKey(3);//相邻每帧图片间隔时间(单位:ms
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/ZBC010/article/details/120570009