OpenCV访问像素点

#三种方法

  • 迭代器

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

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

  • 指针

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

    for (int i = 0; i < Row; i++) {
    for (int j = 0; j < Col; j++) {

    1 Scr.ptr<Vec3b>(i)[j][0] = 0; 2}

    }

  • 动态防问at

#at的使用

gray.at<uchar>(i, j) = 0; cv::mat的成员函数: .at(int y, int x)可以用来存取图像中对应坐标为(x,y)的元素坐标。但是在使用它时要注意,在编译期必须要已知图像的数据类型,这是因为cv::mat可以存放任意数据类型的元素。因此at方法的实现是用模板函数来实现的。

1template<typename _Tp> inline 2_Tp& Mat::at(int i0, int i1) 3{ 4 CV_DbgAssert(dims <= 2); 5 CV_DbgAssert(data); 6 CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]); 7 CV_DbgAssert((unsigned)(i1 * DataType<_Tp>::channels) < (unsigned)(size.p[1] * channels())); 8 CV_DbgAssert(CV_ELEM_SIZE1(traits::Depth<_Tp>::value) == elemSize1()); 9 return ((_Tp*)(data + step.p[0] * i0))[i1]; 10}

假设提前已知一幅图像img的数据类型为 unsigned char型灰度图(单通道),要对坐标为(14,25)的像素重新赋值为25,则对应操作如下:
srcImage.at<uchar>(14,25) = 25; 如果要操作的图片img是一幅数据类型同样为unsigned char的彩色图片,再次要求将坐标(14,25)的像素赋值为25。这个操作跟上面的就有点区别了,需要对这个像素三个通道的每个对应元素赋值,Opencv中图像三原色在内存中的排列顺序为B-G-R(见下面注释),操作过程如下:

1img.at< Vec3b >(14,25) [0]= 25; 2img.at< Vec3b >(14,25) [1]= 25; 3img.at< Vec3b >(14,25) [2]= 25;
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java获得今日零时零分零秒的时间(Date型)

publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS

OpenCV访问像素点 - HelloWorld