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类型

相关推荐
小小工匠30 分钟前
LLM - 大模型与计算机视觉融合:Skyvern核心技术架构揭秘
计算机视觉·大模型·skyvern
AI大模型学徒1 小时前
NLP基础(九)_N-gram模型
人工智能·自然语言处理·nlp·n-gram
极客BIM工作室1 小时前
理清 BERT 中 [CLS] 向量的核心逻辑:训练双向更新与推理作用不矛盾
人工智能·机器学习·bert
IT·小灰灰1 小时前
基于Python的机器学习/数据分析环境搭建完全指南
开发语言·人工智能·python·算法·机器学习·数据分析
Keep_Trying_Go1 小时前
LightningCLI教程 + 视频讲解
人工智能·pytorch·语言模型·大模型·多模态·lightning
1***s6321 小时前
Java语音识别开发
人工智能·语音识别
模型启动机1 小时前
DeepSeek OCR vs Qwen-3 VL vs Mistral OCR:谁更胜一筹?
人工智能·ai·大模型·ocr·deepseek
Chef_Chen1 小时前
数据科学每日总结--Day26--数据挖掘
人工智能·数据挖掘