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

相关推荐
智算菩萨1 小时前
【实战讲解】ChatGPT 5.4深度文献检索完全指南:提示词工程与学术实战策略
论文阅读·人工智能·gpt·搜索引擎·chatgpt·提示词·论文笔记
gutsyang1 小时前
Google Stitch:最佳实践
人工智能·google·gemini·stitch
gloomyfish2 小时前
【最新认知】2026 | 深度学习工业缺陷检测三种技术路线分析与趋势
人工智能·深度学习
Deepoch2 小时前
Deepoc具身模型开发板:赋予机械狗“荒野求生”级VLA智能
人工智能·科技·开发板·具身模型·deepoc
阿里云大数据AI技术2 小时前
阿里云大数据AI平台升级发布:构筑智能体时代的核心基石
人工智能
AI自动化工坊2 小时前
DeerFlow 2.0实战指南:生产级AI Agent框架的Docker化部署与并行编排
人工智能·docker·ai·容器·开源
AI营销先锋2 小时前
原圈科技GEO解密:AI营销变革下,如何抢占增长先机?
大数据·人工智能
冬奇Lab2 小时前
一天一个开源项目(第56篇):人人都能用英语 - AI 时代的外语学习开源项目
人工智能·开源·资讯
前端摸鱼匠3 小时前
【AI大模型春招面试题12】Scaling Laws揭示了模型性能、数据量、计算量之间的什么关系?
人工智能·ai·语言模型·面试·大模型
yuhulkjv3353 小时前
deepseek怎么复制表格
人工智能·ai·chatgpt·豆包·deepseek·ai导出鸭