遍历cv::Mat中包含的cv::点
Iterate through cv::Points contained in a cv::Mat
我正在使用OpenCV模板匹配来在另一个图像中查找图像。
具体地,返回包含匹配的相似性映射的CCD_ 2的matchTemplate()
。
除了使用minMaxLoc()
之外,还有什么方法可以对该cv::Mat
中包含的cv::Point
进行排序吗?
minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc);
我试过:
cv::Mat_<uchar>::iterator it = result.begin<uchar>();
cv::Mat_<uchar>::iterator end = result.end<uchar>();
for (; it != end; ++it)
{
cv::Point test(it.pos());
}
成功有限。
如果我理解正确,您希望根据匹配分数对像素进行排序,然后按排序顺序获得与这些像素对应的点。您可以通过将result
重塑为单行,然后调用cv::sortIdx()
以按排序顺序获取像素的索引来实现这一点。然后,可以使用索引作为从result
开始的偏移,以获得特定像素的位置。
更新:我注意到您的代码中可能存在一个问题。看起来您假设result
包含uchar
数据。cv::matchTemplate()
要求result
包含float
数据。
cv::Mat_<int> indices;
cv::sortIdx(result.reshape(0,1), indices, CV_SORT_DESCENDING + CV_SORT_EVERY_ROW);
cv::Mat_<float>::const_iterator begin = result.begin<float>();
cv::Mat_<int>::const_iterator it = indices.begin();
cv::Mat_<int>::const_iterator end = indices.end();
for (; it != end; ++it)
{
cv::Point pt = (begin + *it).pos();
// Do something with pt...
}
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 在混合代码库中将C转换为C++时出现许多包含错误
- 概念中的cv限定符需要表达式参数列表
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- 为什么您需要C++头文件的包含保护
- 为什么 cv::imread 在包含 tensorflow 的标头后返回 NULL。
- 是否可以拥有一个cv ::垫子,其中包含标量而不是标量的指针
- 遍历cv::Mat中包含的cv::点
- cv::meanShift函数包含什么