C++OpenCV图像基本操作(六)

       

目录

1.图像的归一化

2.图像的放大和缩小

3. 图像反转

4.图片旋转

5.获取视频文件电脑摄像头的使用

6.视频的处理与保存


接下来,我们继续讲解C++的OpenCV图像处理:

1.图像的归一化


void QuickDemo::norm_demo(Mat &image) {
	Mat dst;
	image.convertTo(dst,CV_32F);//把类型转化为float类型
	std::cout << image.type() << dst.type() << std::endl;
	//转化为float类型后就可以使用归一化了
	normalize(image, dst, 1.0, 0, NORM_MINMAX);
	imshow("图像归一化", dst);
}

2.图像的放大和缩小

void QuickDemo::resize_demo(Mat &image) {
	Mat zoomin, zoomout;//定义放大和缩小
	int h = image.rows;
	int w = image.cols;
	resize(image,zoomin,Size(h/2,w/2),0,0,INTER_LINEAR);//0,0这两个参数表示水平方向和数值方向缩放的比率
	imshow("zoomin", zoomin);
	//放大
	resize(image, zoomout, Size(3*h / 2, 3*w / 2), 0, 0, INTER_LINEAR);//0,0这两个参数表示水平方向和数值方向缩放的比率
	imshow("zoomout", zoomout);
}

3. 图像反转

void QuickDemo::flip_demo(Mat &image) {
	Mat dst;
	flip(image, dst, 0);//参数0表示上下反转,1左右反转,-1表示180度旋转
	imshow("图像反转", dst);
}

4.图片旋转

void QuickDemo::rotate_demo(Mat& image) {
	//旋转
	Mat dst, M;//dst输出,M是旋转矩阵
	int w = image.cols;
	int h = image.rows;
	M = getRotationMatrix2D(Point2f(w / 2, h / 2), 45, 1.0);//获得旋转矩阵,参数为矩阵中心,旋转角度,尺寸是否变化,1就是不变
	warpAffine(image, dst, M, image.size());
	imshow("旋转演示", dst);
}

5.获取视频文件电脑摄像头的使用

void QuickDemo::video_demo(Mat& image) {
	VideoCapture capture(0); //初始化对象,把0换成视频文件就可以传入需要处理的视频
	//VideoCapture capture("D://.......");
	Mat frame;
	while (true) {
		capture.read(frame);
		flip(frame, frame, 1);
		if (frame.empty()) {
			break;
		}
		imshow("frame", frame);
		//这里的下面可以对视频做一些前面讲的操作
		//例如做一个色彩空间的转换
		colorSpace_Demo(frame);
		//视频需要键盘操作停顿
		int c = waitKey(10);
		if (c == 27) {//退出
			break;
		}
	}
	//视频做完了一定要释放
	capture.release();
}

         由于我的电脑摄像头有问题这里就不做运行。

6.视频的处理与保存

         视频的每一个画面称为一个frame,视频的分辨率或者大小成为视频的清晰度。fps是指画面每秒传输的帧数。

void QuickDemo::video_demo(Mat& image) {
	//VideoCapture capture(0); //获取摄像头文件,初始化对象,把0换成视频文件就可以传入需要处理的视频
	VideoCapture capture("D:\video_data");
	//获取frame的宽高
	int frame_width = capture.get(CAP_PROP_FRAME_WIDTH);
	int frame_height = capture.get(CAP_PROP_FRAME_HEIGHT);
	int frame_count = capture.get(CAP_PROP_FRAME_COUNT);
	double fps = capture.get(CAP_PROP_FPS);
	std::cout << "frame width:" << frame_width << std::endl;//标准的输入输出
	std::cout << "frame height:" << frame_height << std::endl;
	std::cout << "frame count:" << frame_count << std::endl;
	std::cout << "FPS" << fps << std::endl;
	//将处理好的视频的保存
	VideoWriter writer("D:/test.mp4",capture.get(CAP_PROP_FOURCC),fps,Size(frame_width,frame_height),true);
	Mat frame;
	while (true) {
		capture.read(frame);
		flip(frame, frame, 1);
		if (frame.empty()) {
			break;
		}
		imshow("frame", frame);
		//这里的下面可以对视频做一些前面讲的操作
		//例如做一个色彩空间的转换
		colorSpace_Demo(frame);
		//视频处理好了开始保存
		writer.write(frame);
		//视频需要键盘操作停顿
		int c = waitKey(10);
		if (c == 27) {//退出
			break;
		}
	}
	//视频做完了一定要释放
	capture.release();
	writer.release();
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C++ OpenCV是一种常用的图像处理库,可以用来进行图像的加载、修改和保存等操作。通过使用OpenCV的函数和方法,可以实现对图像的掩膜操作、对比度调整、均衡化以及形态学操作等。 例如,可以使用imread函数加载图像,如下所示: ```cpp Mat src = imread("C:\\Users\\td\\Desktop\\he.jpeg"); ``` 然后,可以使用cvtColor函数将图像转换为指定的色彩空间,例如将BGR色彩空间转换为BGR555色彩空间: ```cpp Mat output; cvtColor(src, output,CV_BGR2BGR555); ``` 接下来,可以使用imwrite函数保存修改后的图像: ```cpp imwrite("D:/zhubajie.png", output); ``` 除了图像加载和保存,还可以进行其他图像处理操作。例如,可以使用equalizeHist函数对图像进行均衡化处理: ```cpp cvtColor(src, src, CV_BGR2GRAY); Mat dst; equalizeHist(src, dst); ``` 还可以使用morphologyEx函数进行形态学操作,如开操作、闭操作、梯度操作等。例如,可以使用getStructuringElement函数创建结构元素,并通过morphologyEx函数对图像进行黑帽操作: ```cpp Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1)); morphologyEx(src, dst, CV_MOP_BLACKHAT, kernel); ``` 以上是C++ OpenCV图像处理的一些基本操作,根据实际需求可以使用不同的函数和方法来完成不同的图像处理任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI炮灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值