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


读取图片

  • 预期效果:从指定路径读取一张图片并显示出来。
  • 源代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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循环,不断地获取新的图片并显示出来就可以完成视频的读取了。

  • 预期效果:从指定路径读取一个视频文件(视频的图像,不包括音频),并播放出来。

  • 源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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后就完成了调用摄像头操作。

  • 预期效果:调用指定摄像头,窗口中显示摄像头拍到的内容。
  • 源代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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;
}