C++ 版 Opencv4 通过迭代器访问Mat类矩阵中的元素错误
2021/12/24 20:08:31
本文主要是介绍C++ 版 Opencv4 通过迭代器访问Mat类矩阵中的元素错误,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
错误说明
很多教程中的示例代码如下:
cv::Mat a(3, 4, CV_8UC3, cv::Scalar(1, 2, 3)); cv::MatIterator_<uchar> it2 = a.begin<uchar>(); cv::MatIterator_<uchar> it2_end = a.end<uchar>(); for (int i = 0; it2 != it2_end; it2++) { std::cout << (int)(*it2); if ((++i % a.cols) == 0) { std::cout << std::endl; } }
实际上执行结果并没有完成所有元素,所有通道的遍历显示
而是仅仅显示了每一个元素的第一通道的值
1111 1111 1111
正确方式
正确的迭代器使用应该如下:
cv::MatIterator_<cv::Vec3b> it = a.begin<cv::Vec3b>(); cv::MatIterator_<cv::Vec3b> it_end = a.end<cv::Vec3b>(); for (int i = 0; it != it_end; it++) { std::cout << (cv::Vec3b)(*it); if ((++i % a.cols) == 0) { std::cout << std::endl; } }
这样的输出才是完整的
[1, 2, 3][1, 2, 3][1, 2, 3][1, 2, 3] [1, 2, 3][1, 2, 3][1, 2, 3][1, 2, 3] [1, 2, 3][1, 2, 3][1, 2, 3][1, 2, 3]
这里3个通道作为一个整体输出,如果想要每一个通道值单独显示,需要再多加一层循环
这篇关于C++ 版 Opencv4 通过迭代器访问Mat类矩阵中的元素错误的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03如何安装 App 并连接到飞牛 NAS?-icode9专业技术文章分享
- 2024-10-03如何安装飞牛 TV 并连接到影视服务器?-icode9专业技术文章分享
- 2024-10-03如何在PVE和ESXI上安装飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS安装系统异常情况处理-icode9专业技术文章分享
- 2024-10-03飞牛NAS如何创建存储空间?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS硬盘会自动休眠吗?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何安装飞牛影视和创建媒体库?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何为家人朋友开通影视账号?-icode9专业技术文章分享