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

相关推荐
禾风wyh7 分钟前
(ICLR 2019)APPNP传播用 PageRank,不用神经网络!
人工智能·深度学习·神经网络
Keep_Trying_Go24 分钟前
论文STEERER人群计数,车辆计数以及农作物计数算法详解(pytorch)
人工智能·pytorch·python
gzu_0126 分钟前
基于昇腾 配置pytorch环境
人工智能·pytorch·python
陈 洪 伟27 分钟前
AI理论知识系统复习(6):梯度饱和、梯度消失、梯度爆炸
人工智能
云在Steven34 分钟前
在线确定性算法与自适应启发式在虚拟机动态整合中的竞争分析与性能优化
人工智能·算法·性能优化
mit6.8241 小时前
[AI tradingOS] AI决策引擎 | decision/engine.go | 交易哲学prompts
人工智能·区块链
whaosoft-1432 小时前
51c自动驾驶~合集43
人工智能
HoneyMoose2 小时前
AI Bot 爬虫新势力
人工智能·爬虫
xier_ran3 小时前
深度学习:Adam 优化器实战(Adam Optimizer)
人工智能·深度学习
人工智能训练3 小时前
Ubuntu中如何进入root用户
linux·运维·服务器·人工智能·ubuntu·ai编程·root