- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
五种Mat元素的访问方法
五种Mat元素的访问方法
方法1、使用Mat的成员函数at()
??? Mat的成员函数at()是一个模板函数,我们这里用的是二维矩阵,所以我们使用的at()函数的声明如代码段3所示(取自OpenCV的源文件)。
[cpp]?view plaincopy
templatetypename?_Tp?_Tp?at(int?i0,?int?i1);??
代码段3?.at()函数的声明
????代码段4是本文第二部分描述的算法的实现,矩阵元素使用at()函数来索引。
[cpp]?view plaincopy
Vec3b?pix;??
for?(int?r?=?0;?r??im.rows;?r++)??
{??
??for?(int?c?=?0;?c??im.cols;?c++)??
??{?????
????pix?=?im.atVec3b(r,c);??
????pix?=?pix*scale;??
????om.atVec3b(r,c)?=?pix;??
??}?????
}??
代码段4. 使用at()函数访问矩阵元素
????注意:使用at函数时,应该知道矩阵元素的类型和通道数,根据矩阵元素类型和通道数来确定at函数传递的类型,代码段4中使用的是Vec3b这个元素类型,他是一个包含3个unsigned char类型向量。之所以采用这个类型来接受at的返回值,是因为,我们的矩阵im是3通道,类型为unsigned char类型的。
方法2、使用Mat的成员函数ptr()
??? 此函数也是模板函数,我们将会用到的ptr函数声明如代码段5所示。此函数返回指定的数据行的首地址。
[cpp]?view plaincopy
templatetypename?_Tp?_Tp*?ptr(int?i0=0);??
代码段 5. ptr成员函数的声明
??? 使用ptr()成员函数完成本文第二部分所述算法的代码如代码段6所示。
[cpp]?view plaincopy
Vec3b?*ppix_im(NULL);??
Vec3b?*ppix_om(NULL);??
for?(int?r?=?0;?r??im.rows;?r++)??
{??
??ppix_im?=?im.ptrVec3b(r);??
??ppix_om?=?om.ptrVec3b(r);??
??for?(int?c?=?0;?c??im.cols;?c++)??
??{??
?????ppix_om[c]?=?ppix_im[c]*scale;??
??}??
}??
代码段 6. 使用ptr访问矩阵元素
方法3、使用迭代器
??? 这里使用的迭代器是OpenCV自己定义的。使用迭代器完成第二部分所述算法的代码如代码段7所示。
[cpp]?view plaincopy
MatIterator_Vec3b?it_im,?itEnd_im;??
MatIterator_Vec3b?it_om;??
it_im????=?im.beginVec3b();??
itEnd_im?=?im.endVec3b();??
it_om????=?om.beginVec3b();??
for?(;?it_im?!=?itEnd_im;?it_im++,?it_om++)??
{??
??*it_om?=?(*it_im)*scale;??
}??
代码段 7. 使用迭代器访问矩阵元素
方法4、使用Mat_简化索引
??? Mat_这个类的元素访问比较容易一点,把原Mat类的对象可以直接赋值给Mat_对象,当然赋值操作并不会开辟新的数据空间,这点大家放心。也就是说使用Mat_时,不会在内存拷贝上花时间。使用这种方法完成第二部分所述算法的代码如代码段8所示。
[cpp]?view plaincopy
Mat_Vec3b?im_,?om_;??
im_?=?im;??
om_?=?om;??
for?(int?r?=?0;?r??im.rows;?r++)??
{??
??for?(int?c?=?0;?c??im.cols;?c++)??
??{??
????om_(r,c)?=?im_(r,c)?*?scale;??
??}??
}??
代码段 8. 使用Mat_访问矩阵数据元素
方法5、使用OpenCV原有的实现
??? 我们的算法实际上OpenCV中已经有实现。就是×运算符重载,代码如代码段9所示。
[cpp]?view plaincopy
om?=?im*scale;??
代码段 9. 使用OpenCV的原有实现访问矩阵元素
四、实验测试
1、测试代码
??? 为了测试方便,将前面的方法统一写到一个c++源文件test.cpp中,其内容如代码段10所示。
[cpp
您可能关注的文档
最近下载
- 【行业标准】NBT 47041-2014 塔式容器.pdf
- 内蒙古版三年级综合实践活动指导第3单元主题活动四《多彩的泡泡》.ppt
- 老年痴呆护理查房ppt.pptx
- 感冒药的正确使用.pdf
- 调色师:达芬奇视频剪辑调色从入门到精通第11章 综合案例:制作《云彩之美》效果.pptx VIP
- 调色师:达芬奇视频剪辑调色从入门到精通第10章 综合案例:制作《银河星空》延时效果.pptx VIP
- 2020年上海黄浦区高三二模语文试卷(答案、解析版).pdf VIP
- 调色师:达芬奇视频剪辑调色从入门到精通第9章 抖音热门调色.pptx VIP
- (正式版)G-B 4839-2009 农药中文通用名称.docx VIP
- 语文一年级上册核心素养教案全册.pdf VIP
文档评论(0)