OpenCV--C++图像/视频读取与保存

一、图像的读取

#include <opencv2\opencv.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相关文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值