我是靠谱客的博主 开朗小土豆,这篇文章主要介绍OpenCV--C++图像/视频读取与保存一、图像的读取二、图像的保存三、读取本地视频四、捕获摄像头视频五、保存视频,现在分享给大家,希望可以做个参考。

一、图像的读取

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <opencv2opencv.hpp> #include <iostream> using namespace std; using namespace cv; //opencv的命名空间 int main(int argc, char** argv) { Mat img; //声明一个保存图像的类 img = imread("1.jpg"); if (img.empty()) //判断图像文件是否存在 { cout << "读取失败" << endl; return -1; } imshow("test", img); //显示图像 waitKey(0); return 0; //程序结束 }

二、图像的保存

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main() { Mat img; //声明一个保存图像的类 img = imread("1.jpg"); //读取图像,根据图片所在位置填写路径即可 if (img.empty()) //判断图像文件是否存在 { cout << "请确认图像文件名称是否正确" << endl; return -1; } imshow("test", img); //显示图像 waitKey(0); bool saved = imwrite("test_save.jpg", img); //将读取的图片保存为test_save.jpg if (saved) { cout << "保存图像成功" << endl; } return 0; }

三、读取本地视频

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main() { VideoCapture video(R"(1.mp4)"); if (video.isOpened()) { cout << "视频中图像的宽度" << video.get(CAP_PROP_FRAME_WIDTH) << endl; cout << "视频图像的高度" << video.get(CAP_PROP_FRAME_HEIGHT) << endl; cout << "视频总帧率" << video.get(CAP_PROP_FPS) << endl; cout << "视频总帧数" << video.get(CAP_PROP_FRAME_COUNT) << endl; } else { cout << "视频文件读取失败" << endl; } while (1) { Mat frame; video >> frame; if (frame.empty()) { break; } //或者设置为0时候可以随意通过鼠标拖拽控制展示窗口的大小 namedWindow("video_test", WINDOW_NORMAL); imshow("video_test", frame); waitKey(1000 / video.get(CAP_PROP_FPS)); } }

四、捕获摄像头视频

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main() { Mat img; VideoCapture video(1); //设置0表示使用电脑自带的摄像头 if (!video.isOpened()) { cout << "摄像头打开失败" << endl; return -1; } video >> img; //获取图像 //检测是否成功获取图像 if (img.empty()) { cout << "获取图像失败" << endl; return -1; } while (1) { Mat frame; video >> frame; if (frame.empty()) { break; } //或者设置为0时候可以随意通过鼠标拖拽控制展示窗口的大小 namedWindow("video_test", WINDOW_NORMAL); imshow("video_test", frame); char c = waitKey(50); if (c == 27) //按ESC案件退出视频保存 { break; } } }

五、保存视频

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main() { Mat img; VideoCapture video(1); if (!video.isOpened()) { cout << "摄像头打开失败" << endl; return -1; } video >> img; //获取图像 //检测是否成功获取图像 if (img.empty()) { cout << "获取图像失败" << endl; return -1; } bool isColor = (img.type() == CV_8UC3); //判断视频是否为彩色 VideoWriter w1; int encode_type = VideoWriter::fourcc('M', 'J', 'P', 'G'); //选择编码格式 double fps = 25.0; //设置视频帧率 string filename = "test_save.avi"; w1.open(filename, encode_type, fps, img.size(), isColor); //创建保存视频文件的视频流 img.size()为保存的视频图像的尺寸 if (!w1.isOpened()) { //判断视频流是否创建成功 cout << "视频打开失败" << endl; } while (1) { Mat frame; video >> frame; if (frame.empty()) { //判断读取图像是否成功 break; } w1.write(frame); //或者写为w1 << img; //或者设置为0时候可以随意通过鼠标拖拽控制展示窗口的大小 namedWindow("video_test", WINDOW_NORMAL); imshow("video_test", frame); char c = waitKey(50); if (c == 27) //按ESC案件退出视频保存 { break; } } video.release(); //这两句是在退出程序后关闭视频流,不写的话系统也会自动关闭 w1.release(); return 0; }

参考资料:

《OpenCV4快速入门》

GitHub - fengzhenHIT/learnOpenCV4: OpenCV 4相关文件

最后

以上就是开朗小土豆最近收集整理的关于OpenCV--C++图像/视频读取与保存一、图像的读取二、图像的保存三、读取本地视频四、捕获摄像头视频五、保存视频的全部内容,更多相关OpenCV--C++图像/视频读取与保存一、图像内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部