opencv访问像素的三种方法

OpenCV(总结篇)图像逐像素访问(三种操作:指针、迭代器、at()函数) 目录 概述 1、指针访问 2、迭代器访问 3、at()函数访问 总代码 效果 参考资料 概述 访问图像像素值是图像处理的基本操作。OpenCV提供了很多访问方式,比较常用的三种方式: (1) 通过指针访问 (逐通道) (2) 通过迭代器访问 (逐像素) (3) 动态地址计算,通过at()函数实现 方法比较: (1)用指针访问像素,速度最快;但在彩色图像处理中,如果要单独对某一个颜色分量处理,则需要通过数学公式计算,不是很直观; (2)推荐用通过迭代器访问像素,速度快,而且提取BGR... 阅读详情

1、指针直接访问

对一个对象Mat,通过调用函数  Mat::ptr<uchar>(i)  来得到第i行的指针地址

for (int i = 0; i < rowN; i++)
	{
		uchar *data = mat.ptr<uchar>(i);
		for (int j = 0; j < colN; j++) //这里colN要注意,下面说明
		{
                        //data[j] = 0;
			//do something with data[j]
		}
	}

注意:这里的colN为实际数组列数,不是图像的像素点列数,colN=mat.cols*mat.channels();       rowN通过rowN=mat.rows;得到

用法:用data[j]为像素中RGB中的一位


2、迭代器访问

对一个Mat,创建一个Mat::Iterator对象it和itend,通过it=Mat::begin()来的到迭代首地址,itend=Mat::end()来得到尾地址,it!=itend来判断是否到尾,it++来得到下一个像素指向,(*it)来得到实际像素

Mat_<Vec3b>::iterator it = outputImage.begin<Vec3b>();
Mat_<Vec3b>::iterator itend = outputImage.end<Vec3b>();
	
	while (it != itend)
	{
                //(*it)[0]=0;
                //(*it)[1]=0;
                //(*it)[2]=0;
		//do something with (*it)[0] (*it)[1] (*it)[2]
		it++;
	}
用法:(*it)[0]代表当前像素单位的B位,(*it)[1]代表当前像素单位的G位,(*it)[2]代表当前像素单位的R位

注意:OPENCV中,RGB的存储是反过来的


3、动态访问

这种方法是最慢的

对一个mat,可以直接用at函数来得到像素,Mat::at<Vec3b>(i,j)为一个像素点

for (int i = 0; i < rowN; i++)
	{
		for (int j = 0; j < colNum; j++)        //这里colNum要注意,下面说明
		{
                        //mat.at<Vec3b>(i, j)[0]=0; 
                        //mat.at<Vec3b>(i, j)[1]=0;
                        //mat.at<Vec3b>(i, j)[2]=0;
			//do something with mat.at<Vec3b>(i, j)[0] mat.at<Vec3b>(i, j)[1] mat.at<Vec3b>(i, j)[2]
		}
	}
注意:这里的colNun为图像的像素点列数,不是实际数组列数,与第一种方法相反,colNum=mat.cols;        rowN通过rowN=mat.rows;得到

用法:mat.at<Vec3b>(i,j)[0]表示i行j列像素的B位,mat.at<Vec3b>(i,j)[1]表示i行j列像素的G位,mat.at<Vec3b>(i,j)[2]表示i行j列像素的R位

注意:OPENCV中,RGB的存储是反过来的

Opencv访问图像像素的三种方法 一、指针法 给图像的像素赋值,以此来访问图像的像素。 #include #include using namespace std; using namespace cv; int main() { Mat image = imread("D:\\vvoo\\lena.jpg"); imshow("image", image); //三通道 uchar *data = imag 阅读详情

相关推荐

OPENCV2 访问图像像素值的三种方法

访问图像像素值是图像处理的基本操作。OPENCV2提供了很多中访问方式,本文实现了其中比较常用的三种方式: (1) 通过指针访问 (2) 通过迭代器访问 (3) 动态地址计算,通过at()函数实现。

learn_sunzhuli的专栏 7377

OpenCV—访问图像中的像素

序言: OpenCV3编程入门已经进入第五章 (Core组件进阶) 学习了,后面也越来越多对图像的处理,这一节主要是对像素的认识。图像矩阵的大小取决于所用的颜色模型,也就是说取决于所用的通道数。如下灰度图像:对于多通道的图像,矩阵中的列会包含多个子列,子列个数与通道数相等。(1)问题提出:对于单通道像素,有256个不同的值,若三通道图像,颜色的存储值就有一千六百万多种。解决: 如此之多的颜色数值,但是达到同样效果的只占很小一部分。颜色空间缩减(color space reduction)可以大大降低运算复杂

qq_44859533的博客 2530

【OpenCV C++】访问图像中像素的三种方法

Opencv C++ 访问图像中像素的三种方法程序说明方法一 用指针访问像素运行效果方法二 用迭代器访问像素运行效果方法二 用动态地址计算配合at访问像素运行效果总结 程序说明 // 程序描述:OpenCV C++访问图像中像素的三种方法 // 参 考:毛星云《OpenCV3编程入门》 // 操作系统: Windows 10 64bit // 开发语言: C++ // IDE 版 本:Visual Studio 2019 // OpenCV版本:4.20 任何图像处理算法,都是从操作每个像

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1419

【OpenCV】OpenCV访问像素点的三种方式

环境配置   VS2013+OpenCV3.0+Win7(X64)    前言   OpenCV是图像处理最常用的库之一。它提供了许多常用的图像处理算法相关的函数,极大地方便了图像处理方法的开发,而图像处理最本质的就是对图像中像素点的像素值的运算。所以我们需要了解一下OpenCV如何访问图像中的像素点。首先说明一下,这里默认图像储存为Mat格式,RGB类型。    三种访问方式 ...

不用先生的博客 2万+

OpenCV访问图片像素的三种方法

OpenCV访问图片像素的高效方法

C++系统研发之眼 852

opencv中对图像像素的访问

首次接触图像处理,通过次来记录自己的学习记录,以方便回忆。 //指针访问像素 void colorReduce(Mat& temImage, int div) { //行数 int rowNumber = temImage.rows; cout << "图像通道数:" << temImage.channels() << endl; //列数*通道数=每一行的元素个数 int colNumber = temImage.cols * temImage.channels(); for (int row = 0; row < rowNumber;row++) { uchar* data = temImage.ptr<uchar>(row); for (int col = 0; col < colNumber;col++) { data[col] = data[col] / div*div + div / 2; } } } //迭代器iterator操作像素 void iterColorReduce(Mat& temImage,int div) { Mat_<Vec3b>::iterator it = temImage.begin<Vec3b>(); Mat_<Vec3b>::iterator itend = temImage.end<Vec3b>(); //存取彩色图像的像素 while (it != itend) { //开始处理每个像素 (*it)[0] = (*it)[0] / div*div + div / 2; (*it)[1] = (*it)[1] / div*div + div / 2; (*it)[2] = (*it)[2] / div*div + div / 2; ++it; } } //动态地址计算像素 void atColorReduce(Mat& temImage, int div) { int rowNumber = temImage.rows; int colNumber = temImage.cols; //存取彩色图像 for (int row = 0; row < rowNumber; row++) { for (int col = 0; col < colNumber; col++) { //开始处理每个图像 //蓝色通道 temImage.at<Vec3b>(row, col)[0] = temImage.at<Vec3b>(row, col)[0] / div*div + div / 2; //绿色通道 temImage.at<Vec3b>(row, col)[1] = temImage.at<Vec3b>(row, col)[1] / div*div + div / 2; //红色通道 temImage.at<Vec3b>(row, col)[2] = temImage.at<Vec3b>(row, col)[2] / div*div + div / 2; } } }

opencv访问像素的几种方法

方法一:指针访问 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace std; using namespace cv; void colorReduce(Mat&...

weixin_30553065的博客 350

Zabbix华为交换机光衰告警

zabbix使用自动发现监控huawei网络设备光衰

qq_31651649的博客 4529

OpenCV学习

1.对于.at<uchar>(i, j) 和.at<uchar>(Point(i, j)) 的区别 前者是对第 i 行第 j 列的像素进行访问,后者是对点(i, j)进行访问 2. 动态地址访问像素:.at<Vec3b>(i, j)[ ] 和 .at<uchar>(i, j) int b = src.at<Vec3b>(i,j)[0]; int g = src.at<Vec3b>(i,j)[1]; int r =...

preciousjl的博客 5078

ks-快手滑块验证码-Js逆向

本文分析了快手滑块验证码的破解过程。首先通过抓包找到验证码背景图接口,发现需要动态获取captchaSession参数。然后深入分析验证流程,发现verifyParam参数被加密处理,需要追踪其生成逻辑。文章详细解析了加密参数c的构成,包括captchaSn、滑动距离、轨迹信息等,并指出轨迹验证较为严格。最后通过对比浏览器和本地生成的加密值,确认加密逻辑正确,但指出轨迹生成仍需优化。作者建议参考相关文章深入分析轨迹逻辑,并提供了验证成功的截图作为参考。

2302_76420666的博客 1878

解决ArcGIS-OpenStreetMap Toolbox-Load OSM File错误

在安装成功OpenStreetMap Toolbox后,首次运行Load OSM File工具,出现以下错误

Zjf的博客 8820

OpenCV中访问图像像素的三种方法及快慢比较

三种访问Mat中元素的方法为: 指针访问 迭代器iterator 动态地址访问 1.用指针访问像素 指针访问像素利用的是C语言中的操作符[].从处理时间上看这种方法最快。Mat.ptr<>(i)取第i行的首地址,列数是Mat.cols列数乘以Mat.channels()通道数,元素一共就有列数*行数*通道数。 Mat image1=imread("name.jpg",1);...

zbr794866300的博客 1872

相机基础知识讲解:CMOS和CCD

相机基础知识讲解:CMOS和CCD

Coppa的博客 5万+

opencv之访问图像像素的 三种方法

opencv之访问图像像素 访问像素的三种方法 ①指针访问:最快 ②迭代器iterator:较慢,非常安全,指针访问可能出现越界问题 ③动态地址计算:更慢,通过at()实现。适用于访问具体某个第i行,j列的像素,而不适用遍历像素   Mat在内存中存储形式   灰度图的存储形式          RGB的存储形式    一般情况下,Mat是连续存储的,按行连接。

baolinq的博客 1177

(超详细)Scala环境搭建(scala-2.12.15、IDEA2021.1.3)

Scala环境搭建(scala-2.12.15、IDEA2021.1.3) JunLeon——go big or go home 目录 Scala环境搭建(scala-2.12.15、IDEA2021.1.3) 一、Scala概述 1、什么是Scala? 2、Scala发展史 3、Scala与Java的关系 二、Scala环境搭建 1、环境准备 2、Scala安装与配置环境变量 3、验证Scala 三、编写第一个Scala程序 1、使用IDEA创建maven工程 2、.

JunLeon的博客 3万+

【Claude】权限被拒绝 (Permission Denied) 全场景排查 — 已解决

权限配置是 Claude Code 安全使用的核心机制。通过合理的 allow/deny 规则、正确的通配符使用、子代理独立配置、定期安全审计,可以在保证安全性的同时不影响开发效率。deny 优先:deny 规则优先级高于 allow,先保护敏感资源通配符精确单层匹配,**递归匹配,Bash(cmd*)允许带参数最小权限:只允许必要的操作,避免Bash(*)等危险规则CI 用 skip:Headless 模式用避免挂起子代理独立:每个子代理单独配置权限,不自动继承保护密钥:deny.env。

一键难忘的博客 3946

opencv中对图像像素点访问的三种方法利用程序进行解读

代码放到自己的工程中,运行就可以的 #include &lt;opencv2\opencv.hpp&gt; #include &lt;opencv2\core\core.hpp&gt; #include &lt;opencv2\highgui\highgui.hpp&gt; #include using namespace std; using namespace cv; //用指针访问像素是最...

nbxuwentao的博客 845

Claude Code 里的 MCP 连接失败到底在报什么

文档还说明,HTTP 类型、stdio 类型等 MCP server 的接入方式不同,stdio server 会被 Claude Code 当作本地进程拉起,而 HTTP server 则需要 Claude Code 去访问一个已经存在的 HTTP endpoint。把这段输出翻成更接地气的运维语言,就是 Claude Code 已经知道我们想接两个外部能力,一个是 SAP ADT 官方 MCP,一个是 Chrome DevTools MCP,但当前没有一个完成握手。,因为它的信号更明确。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 147

OpenCV精进之路(零):访问图像中像素的三种方法

访问像素的三种方法 指针访问:最快 迭代器iterator:较慢,非常安全,指针访问可能出现越界问题 动态地址计算:更慢,通过at()实现。适用于访问具体某个第i行,j列的像素,而不适用遍历像素 这里可以参考毛星云的OpenCV入门编程中的这三种方法的访问时间 https://download.youkuaiyun.com/download/aidam_bo/11097032 Ma...

YBAdiam的博客 605

Python从0到100(二):Python语言介绍及第一个Pyhon程序

Python从0到100(二):Python语言介绍及第一个Pyhon程序。与C和Java比,Python的学习成本和难度曲线不是低一点,更适合新手入门,自底向上的技术攀爬路线。

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 5440

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

opencv之访问图像像素的三种方法

for (size_t i = 0; i < _img.rows; i++) { for (size_t j = 0; j < _img.cols; j++) { if (_img.at<cv::Vec3b>(i,j)[0] >= 100 && _img.at<cv::Vec3b>(i,j)[0] <= 124 && _img.at<cv::Vec3b&g..

xp_fangfei的博客 2549

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OpenCV3之——访问图像中像素的三种方法

      任何图像处理算法,都是从操作每个像素开始的。即使我们不会使用OpenCV提供的各种图像处理函数,只要了解了图像处理算法的基本原理,也可以写出具有相同功能的程序。【方法一】    指针访问:C操作符[ ];【方法二 】   迭代器 iterator;【方法三】    动态地址计算。【图像颜色缩减】实例://头文件,命名空间部分 #include &lt;opencv2/core/core...

衣带渐宽人憔悴 817

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Opencv之core组件(一):访问图像中像素的三种方法

文章目录方法一:指针访问:C操作符[]方法二:用迭代器操作像素方法三:利用动态地址计算 在Opencv中,提供了三种访问每个像素的方法 这三种方法在速度上略有差异,debug模式下,差异非常明显,release模式下,这种差异就不明显了. 通过一种程序来说明: 题:原来的图像是256种颜色,现在想将它变成64种颜色,那就只需要将原来的颜色整除4,再乘4就可以了 程序的主函数 int main() ...

hjxu2016的博客 285

OpenCV C++ 中,访问图像像素三种常用方法

🔹 方法 2:指针访问 cv::Mat::ptr<>()(推荐用于遍历整行或全图)🔹 方法 1:cv::Mat::at<>() 方法(推荐用于调试和小规模访问)🔹 方法 3:迭代器访问(安全且适合 STL 风格编程)✅ OpenCV C++ 访问像素的三种方法。

m0_37603703的博客 310

OpenCV中访问图像中像素的三种方法

1. 用指针访问像素元 用指针访问像素的这种方法利用的是C语言中的操作符[ ],这种方法最快。如: cv::Mat image(100,100,CV_8UC3,cv::Scalar(255,255,255)); unsigned char *pImg = image.ptr&lt;unsigned char&gt;(i);//获取第i行的首地址 pImg[j]/=2;//第i行j列的像素值...

xiaoou的博客 934

OpenCV(图像处理)—访问像素的三种方法

方法一:用指针访问像素 1 #include <opencv2/opencv.hpp> 2 #include <opencv2/core/core.hpp> 3 #include <opencv2/highgui/highgui.hpp> 4 using namespace cv; 5 using namespace std; 6 v...

weixin_30415801的博客 473
上一篇: 关于directdraw的blt函数
下一篇: 感兴趣区域ROI
alickr
博客等级 码龄12年 44粉丝 39原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值