OpenCV_图像像素读写操作

本文详细介绍了如何在C++项目中使用OpenCV进行图像像素的读写操作,包括使用头文件声明Pixel类,通过遍历和指针方式处理灰度图和彩色图,以及在主函数中调用这些操作。

数组遍历的方式进行图像像素读写

cpp 复制代码
void QuickDemo::pixelVisit_Demo(Mat& image) {

	namedWindow("像素读写显示", WINDOW_FREERATIO);
	int w = image.cols;
	int h = image.rows;
	int dims = image.channels();
	/*	数组
	for (int row = 0; row < h; row++)
	{
		for (int col = 0; col < w; col++)
		{
			if (dims==1) {//灰度图像
				int pv = image.at<uchar>(row, col);//获取像素
				image.at<uchar>(row, col) = 255 - pv;
			}
			else {//彩色图像
				Vec3b bgr = image.at<Vec3b>(row, col);
				image.at<Vec3b>(row, col)[0] = 255 - bgr[0];
				image.at<Vec3b>(row, col)[1] = 255 - bgr[1];
				image.at<Vec3b>(row, col)[2] = 255 - bgr[2];
			}
		}
	}
	*/

	//指针
	for (int row = 0; row < h; row++)
	{
		uchar* current_row = image.ptr<uchar>(row);
		for (int col = 0; col < w; col++)
		{
			if (dims == 1) {//灰度图像
				int pv = *current_row;//获取像素
				*current_row++ = 255 - pv;
			}
			else {//彩色图像
				*current_row++ = 255 - *current_row;
				*current_row++ = 255 - *current_row;
				*current_row++ = 255 - *current_row;
			}
		}
	}
	imshow("像素读写显示", image);
}

int h = image.rows;,行是高
int w = image.cols;,列是宽
image.channels();,获取传入图片的通道数

单通道灰度图处理:

image.at<uchar>(row, col);

获取图片的像素通过图片对象.at方法操作

图片的每个像素都是字符类型的,通过uchar进行储存

因为要输出显示,故通过int yy = image.at<uchar>(row, col);将字符类型转换为int类型

image.at<uchar>(row, col) = 255 - yy;,为了对图片像素操作效果明显,这里取反

三通道彩色图处理:

image.at<Vec3b>(row, col);,通过Vec3b一次性存储三颜色通道的像素点值

image.at<Vec3b>(row, col)[0] = 255 - bgr[0];,因为是三颜色通道,为了对像素操作显示效果明显,也取反,其他通道也类似

显示图片:

namedWindow("像素读写显示", WINDOW_FREERATIO);,定义一个窗口名,自适应缩放
imshow("像素读写显示", image);,显示即可

指针遍历的方式进行图像像素读写

uchar* current_row = image.ptr<uchar>(row);获取当前行的指针,因为图片数据是uchar类型的,故定义的指针也应该是uchar类型

相关推荐
繁依Fanyi10 分钟前
828 华为云征文|华为 Flexus 云服务器部署 RustDesk Server,打造自己的远程桌面服务器
运维·服务器·开发语言·人工智能·pytorch·华为·华为云
shuxianshrng12 分钟前
鹰眼降尘系统怎么样
大数据·服务器·人工智能·数码相机·物联网
说私域16 分钟前
开源 AI 智能名片小程序:开启内容营销新境界
人工智能·小程序
红米煮粥22 分钟前
OpenCV-直方图
人工智能·opencv·计算机视觉
隔窗听雨眠29 分钟前
计算机视觉学习路线
计算机视觉
DisonTangor41 分钟前
上海人工智能实验室开源视频生成模型Vchitect 2.0 可生成20秒高清视频
人工智能·音视频
科技评论AI41 分钟前
Adobe预览今年晚些时候推出的AI视频工具
人工智能·adobe
美狐美颜sdk43 分钟前
探索视频美颜SDK与直播美颜工具的开发实践方案
人工智能·计算机视觉·音视频·直播美颜sdk·视频美颜sdk
极术社区1 小时前
ResNeXt学习
开发语言·学习·计算机视觉·php
kay_5451 小时前
YOLOv8改进 | 模块缝合 | C2f 融合SCConv提升检测性能【CVPR2023】
人工智能·python·深度学习·yolo·目标检测·面试·yolov8改进