OpenCV_图像像素读写操作

news2024/12/23 22:35:17

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2140968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【最新华为OD机试E卷-支持在线评测】增强的strstr(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

替换 Oracle ,江河信息用 TDengine 解决高基数查询写入问题

在数字经济快速发展的背景下&#xff0c;智慧水利作为重要的基础设施之一&#xff0c;正逐步成为提升水资源管理效率、优化生态环境的重要力量。江西省水投江河信息技术有限公司&#xff08;以下简称“江河信息”&#xff09;作为高新技术国有企业&#xff0c;坚定致力于打造数…

监控binlog日志监控表变化进行消息通知

前言 由于我们做项目的时候有项目任务管理工具&#xff0c;目前用的最多的是禅道&#xff0c;而我们用的是redmine&#xff0c;而redmine是使用ruby写的&#xff0c;刚好我们这边没有会用ruby的人&#xff0c;所以就有了这样一个小工具&#xff0c;用于监控binlog日志通过钉钉…

机器人相关知识的本身和价值

简要将人类简史分为 农业工业信息智能 四个时代。 在信息时代&#xff0c;知识本身就可以等同于价值。 常识看&#xff0c;学历可以变现&#xff0c;高品质文凭能极大概率获得工资远远高于平均值的工作机会。 在智能时代&#xff0c;知识本身毫无价值&#xff0c;知识的应…

UML 类图(提供 Java 实现)

文章目录 UML 类图概述及作用类图表示法类&#xff08;接口&#xff09;的表示类与类之间关系的表示关联关系&#xff08;Association&#xff09;单向关联&#xff08;Unidirectional Association&#xff09;双向关联&#xff08;Bidirectional Association&#xff09;自关联…

大学生看过来,必备4款写论文AI写作网站先稿后付

在当今学术研究和写作领域&#xff0c;AI论文写作工具的出现极大地提高了写作效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。其中&#xff0c;千笔-aipasspaper是一个备受推荐的平台&#xff0c;它结合了先稿后付…

7.2 溪降技术:下攀

目录 7.2 下攀概述视频课程观看电子书&#xff1a;下攀 一级风险评估装备个人动作技术:面壁下攀烟囱下攀 协助队友总结 7.2 下攀 概述 下攀可能是峡谷探险中最被低估的技能。峡谷中经常存在可以下攀的小落差&#xff0c;这种方式比设置绳索快得多。一组熟练的下攀者能迅速完成…

JavaScript高级——闭包的理解

1、如何产生闭包&#xff1f; —— 当一个嵌套的内部&#xff08;子&#xff09;函数引用了嵌套的外部&#xff08;父&#xff09;函数的变量&#xff08;函数&#xff09;时&#xff0c;就产生了闭包。 2、闭包到底是什么&#xff1f; —— 使用 chrome 查看 —— 理解一&a…

字符编码发展史1 — ASCII和EASCII

1. 字符集与字符编码 1.1. 字符集1.2. 字符编码1.3. 两者的关系 2. 字符编码的发展历史 2.1. 第一个阶段 ASCII编码 2.1.1. ASCII2.1.2. EASCII 1. 字符集与字符编码 1.1. 字符集 字符集&#xff08;Charcater Set或Charset&#xff09;&#xff1a; 是一个系统支持的所有…

【AI小项目5】使用 KerasNLP 对 Gemma 模型进行 LoRA 微调

目录 一、项目简介概述时间主要工作和收获技术栈数据集结果参考 二、完整代码概览设置安装依赖选择一个后端导入包 加载数据集加载模型微调前的推理欧洲旅行例子光合作用例子 LoRA 微调微调后的推理欧洲旅行例子光合作用例子 改进方向 三、背景知识补充Fine-tune&#xff08;微…

数据结构(2):LinkedList和链表[2]

我们在上一篇文章中着重讨论了单链表的实现。其中我们要注意单链表进行遍历时一步一步走的思想。那么这篇文章我们将继续讨论链表的更多内容&#xff0c;那就让我们开始吧。 1.经典单链表算法题 我们将通过几个经典的题对单链表进行进一步的认识。 (1)反转链表 206. 反转链…

2024年上海初中生古诗文大会倒计时一个半月:做一做2024官方模拟题

2024年上海市初中生古诗文大会自由报名活动的初赛日期于11月3日开始&#xff0c;距离今天大概一个半月。 如何准备2024年初中生古诗文大会的自由报名初选呢&#xff1f;吃透&#xff08;记熟&#xff09;2024年初中生古诗文阅读专辑上的题目、知识点和往年真题及知识点。 有许…

Python数据分析-世界上最富有的1000人

一、研究背景 随着全球化的加速发展和技术的进步&#xff0c;财富分配问题日益成为全球关注的焦点。财富的不平等现象日益明显&#xff0c;少数极富有的个人掌握了全球大部分的财富资源。了解全球最富有个人的财富分布及其背后的行业和国家因素&#xff0c;对于分析全球经济趋…

Element-ui el-table 全局表格排序

实现效果如下&#xff1a; 一、当页数据排序 如果只想要当前页面排序&#xff0c;只会涉及到前端&#xff0c;只需在<el-table-column>标签上添加 :sortable"true"即可 二、自定义排序 如果想要全局排序&#xff0c;需要自定义排序函数&#xff0c;请求后台排…

Linux基础---10进程管理

一.查看和关闭进程 1.查看进程 基础指令: ps -efPID 进程编号&#xff0c;PPID 父进程编号&#xff0c; CMD命令名称 进阶指令–查看进程的树形结构&#xff1a; yum install psmisc -y #首先安装psmisc后可直接使用pstreepstree2.关闭进程 要想关闭某个或多个进程需要知道…

简洁明了!中缀表达式转为后缀表达式规则及代码

简单来说&#xff0c;就是弄两个栈&#xff0c;判断执行&#xff1a; 上代码&#xff1a; #include<iostream> #include<stack> #include<cstring> using namespace std; stack<char>s1,s2; char now; int main(){string c;cin>>c;for(int i0;…

微信视频号导出视频软件

最近研究了一下微信视频号导出视频的方法&#xff0c;目前发现还是比较难搞&#xff0c;查了一些资料&#xff0c;写了一个可以导出视频的软件&#xff0c;目前还不完善&#xff0c;但是导出视频到本地还是没问题&#xff0c;先用着吧&#xff0c;后期再完善。先记录一下。 测…

人工智能浪潮下,程序员如何锻造不可替代的核心竞争力?

人工智能时代&#xff0c;程序员如何保持核心竞争力&#xff1f; 在人工智能时代&#xff0c;程序员如何保持核心竞争力是一个值得深思的问题。随着技术的快速发展&#xff0c;特别是AI技术的不断进步&#xff0c;程序员的角色和工作方式正在经历前所未有的变革。以下是一些关…

docker部署Stirling-PDF

github网址&#xff1a; GitHub - Stirling-Tools/Stirling-PDF: #1 Locally hosted web application that allows you to perform various operations on PDF files 1、官方docker镜像无法拉取&#xff0c;使用别人阿里云私人镜像仓库下载Stirling-PDF镜像&#xff1a; regi…

如何设置word页码从指定页开始

如何设置word页码从指定页开始 在使用Word编辑一些比较正式的文档时&#xff0c;封面页或者是前几页都是不能有页码的&#xff0c;那么怎么设置页码从指定页开始&#xff0c;可以通过分隔符来实现页码从指定页开始。 word设置页码从指定页开始的具体步骤如下&#xff1a; 1.…