【拜小白opencv】16-用四种方法访问图像中的每个像素

本文介绍了使用OpenCV高效访问图像像素的四种方法:动态地址计算、指针遍历、isContinuous()函数和迭代器。内容包括每种方法的详细解释和适用场景,适合想要提高图像处理效率的读者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常言道“温故而知新”,写此文章就是对自己目前学习内容的小小的总结与记录。

本文力求用最简洁的语言,详细的代码将此部分内容讲解清楚,但由于博主同样是刚刚接触OpenCV,或许表达上有些瑕疵,还望读者能够指教探讨,大家共同进步。

博主机器配置为:VS2013+opencv2.4.13+Win-64bit。

若本文能给读者带来一点点启示与帮助,我就很开心了。

===========================分割线========================


颜色压缩(Color Reduction)最简单的理解就是减少表示图像的颜色数目,我们都知道,8位的3通道RGB真彩图像包括了1600多万(256×256×256=16777216)的颜色数目,其实在某些应用中用不到这么多数量,往往并不是将图像作为一个整体进行操作,而是对图像中的所有点或特殊点进行运算,所以遍历图像就显得很重要,如何高效的遍历图像是一个很值得探讨的问题。本节将介绍四种方法访问图像中的每个像素。

  1. 动态地址计算——配合.at<Vec3b>(i, j)[k]访问像素。
  2. 用指针来遍历图像——C操作符[]。
  3. 更高效的方法——isContinuous()函数。
  4. 迭代器——比较安全的方式。

=================================分割线===========================

图像矩阵如何存储在内存中

首先大致说明下图像数据如何在内存中存储。Mat是OpenCV2.x版本以上基本的图像类型,Mat可以视为一个矩阵,矩阵的大小依赖于该Mat是什么颜色空间(Color Space),比如最基本的灰度(Gray scale)或者RGB,CMYK,YCbCr等,因为这决定了该Mat具有多少个通道,一般来讲,灰度图像只有一个通道,而RGB图像具有三个通道。

对于灰度图像来讲,图像数据在内存中的存储如图所示:
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值