环境配置

  VS2013+OpenCV3.0+Win7(X64)

  

前言

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

三种访问方式

1. 利用指针访问

  通过调用函数 Mat::ptr(i) 来得到第i行的首地址地址,然后在行内访问像素;

for (int i = 0; i < Row; i++)
{        for (int j = 0; j < Col; j++){       Scr.ptr<Vec3b>(i)[j][0] = 0;
    }
}

  上面的Vec3b指的是3通道的uchar类型的数据。i,j表示像素点在图像中的位置,而[0]表示通道编号,因为是3通道的数据,所以[0]表示RGB中的蓝色通道(因为在OpenCV中通道的顺序是BGR)。
  

2. 利用迭代器访问

  创建一个Mat::Iterator对象it,通过it=Mat::begin()来的到迭代首地址,递增迭代器知道it==Mat::end()结束迭代;

while (it != Scr.end<Vec3b>())
{//(*it)[0] = 0;//蓝色通道置零;(*it)[1] = 0;//绿色通道置零;//(*it)[2] = 0;//红色通道置零;it++;
}

  

3. 动态访问

  这种方法是最慢的一种方法,但是比较好理解,使用at函数来得到像素,Mat::at(i,j)为一个像素点的像素值数组,是一个大小为3的数组。从0到2存放了BGR三种颜色的灰度值。

for (int i = 0; i < Row; i++)
{for (int j = 0; j < Col; j++){Scr.at<Vec3b>(i, j)[2] = 0;}
}

运算结果



代码

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>using namespace std;
using namespace cv;void main()
{Mat Scr = imread("lena.jpg");if (Scr.empty() ){printf("%s\n", "读入图片失败;");system("pause");return;}imshow("原始图像", Scr);int Row = Scr.rows;            //获取行数目;int Col = Scr.cols;            //获取列数目;int Channel = Scr.channels();  //获取通道数目;Mat Array(3, 3, CV_8UC3, Scalar(2, 3, 240));cout << "Array=" <<endl<< Array<<endl;//指针的访问for (int i = 0; i < Row; i++){        for (int j = 0; j < Col; j++){       Scr.ptr<Vec3b>(i)[j][0] = 0;}}//迭代器访问,访问的是每一个像素点Mat_<Vec3b>::iterator it = Scr.begin<Vec3b>();while (it != Scr.end<Vec3b>()){//(*it)[0] = 0;//蓝色通道置零;(*it)[1] = 0;//绿色通道置零;//(*it)[2] = 0;//红色通道置零;it++;}//动态访问,访问的是每一个像素点,最慢也是最直接易理解的访问方式for (int i = 0; i < Row; i++){for (int j = 0; j < Col; j++){Scr.at<Vec3b>(i, j)[2] = 0;}}imshow("改变后的图像", Scr);waitKey(0);system("pause");return;
}

已完。。

【OpenCV】OpenCV访问像素点的三种方式相关推荐

  1. Struts2访问Servlet的三种方式

    Struts2访问Servlet的三种方式 基本介绍 在Struts2中,Action并没有直接和Servlet API耦合.虽然Struts2 中的Action访问Servlet API麻烦一些,但 ...

  2. 视频解码opencv、ffmpeg、decord三种方式速度对比

    在做视频理解和视频相关的项目都绕不开视频解码的过程,本文对比了三种视频解码的方法,仅供参考. # -*- coding: utf-8 -*- # @Time : 2020年9月30日16:01:40 ...

  3. Python使用opencv实现图片定位第三种方式

    # -*- encoding=utf-8 -*- __author__ = 'Jeff.xie'#这个方法识别度更高,比cv2.matchTemplate更好, #cv2.matchTemplate无 ...

  4. bash shell脚本访问PostgreSQL的三种方式

    bash脚本里有三种方式访问PostgreSQL数据库 但前提是要设置密码文件.当然对于有系统对应账户的数据库角色可以绕过密码登录环节,如 1 $ sudo -u postgres psql 或 1 ...

  5. COS中访问文件的三种方式

    1.通过FID来访问文件(比如EF,DF) 2.通过SFI来访问文件(有些COS命令可以通过SFI来快速访问文件,而不需要事先选中文件) 3.通过文件名来访问文件(只能是DF文件) 转载于:https ...

  6. 安装web服务器访问站点的三种方式,Web服务器配置方法

    您可能感兴趣的话题: 服务器配置 核心提示:本教程为大家介绍web服务器的配置方法. Web服务器概述 Web服务器又称为WWW服务器,它是放置一般网站的服务器.一台Web服务器上可以建立多个网站,各 ...

  7. 实现内网映射的三种方式:

    实现内网映射的三种方式: 1.ngrok. 1)下载ngrok  下载地址:https://ngrok.com/download  选择合适的版本下载,我下载的是win64为的是这样: 2)解压下载下 ...

  8. 【opencv学习笔记】第五篇:访问图像中像素的三种方式、ROI区域图像叠加和图像混合

    1. 访问图像中像素的三种方式 任何图像处理算法,都是从操作每个像素开始的.在OpenCV中,提供了三种访问每个像素的方法. 方法1:指针访问:C操作符[] 方法2:迭代器iterator 方法3:动 ...

  9. OpenCV像素点邻域遍历效率比较,以及访问像素点的几种方法

    OpenCV像素点邻域遍历效率比较,以及访问像素点的几种方法 前言: 以前笔者在项目中经常使用到OpenCV的算法,而大部分OpenCV的算法都需要进行遍历操作,而且很多遍历操作都是需要对目标像素点的 ...

最新文章

  1. Google Mock(Gmock)简单使用和源码分析——源码分析
  2. 如何从值获取C#枚举描述? [重复]
  3. gx works2 存储器空间或桌面堆栈不足_保证安全的移动空间,超高安全品质的私家车推荐...
  4. 题目1103:二次方程计算器
  5. Objective-C语法之Object对象的那些事儿(五)
  6. Ethernet/IP 学习笔记一
  7. C语言数组元素总和最大的连续子序列的算法(附完整源码)
  8. [翻译]你或许还未听说过的一些ASP.NET 2.0要诀
  9. Java中继承、this关键字、super关键字
  10. 模块目录下site.php,使用apache配置为每个站点指定PHP包含目录
  11. BigDecimal用法介绍
  12. 谷歌 Nest 和 Fitbit 漏洞奖励翻番
  13. Intel的AVX2指令集解读
  14. git命令——git commit
  15. jmeter笔记02
  16. lua-获取当前时间
  17. 洛谷 P2879 [USACO07JAN]区间统计Tallest Cow
  18. 深入剖析线程同步工具CountDownLatch原理
  19. 实时Javascript开发框架Clouda、Meteor、Firebase对比
  20. Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足的最好解决办法。

热门文章

  1. Windows Azure奇趣应用之Swingify
  2. 《老子》中国古代先秦诸子百家经典欣赏
  3. Node跨域cors模块,nodejs+express跨域
  4. Docker实战部署JavaWeb项目-基于SpringBoot
  5. #苹果maccmsv10# redis memcached 缓存的若干问题解决
  6. C语言 判断两个字符串大小相等关系
  7. 「mac版」支持flash的浏览器,谷歌浏览器Chrome、火狐浏览器Firefox
  8. 【Day09】JavaScript 为什么要区分微任务和宏任务
  9. 《高性能mysql》读书笔记一
  10. 修改webpack配置,在react中使用less