我是靠谱客的博主 开朗小土豆,最近开发中收集的这篇文章主要介绍OpenCV--C++图像/视频读取与保存一、图像的读取二、图像的保存三、读取本地视频四、捕获摄像头视频五、保存视频,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
一、图像的读取
#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; //程序结束
}
二、图像的保存
#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;
}
三、读取本地视频
#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));
}
}
四、捕获摄像头视频
#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;
}
}
}
五、保存视频
#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++图像/视频读取与保存一、图像的读取二、图像的保存三、读取本地视频四、捕获摄像头视频五、保存视频所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复