我检查了minMaxLoc,但它只给出了矩阵的最大和最小位置。我需要找到的是最大或等于其他数字。例如(abc> = 7)然后从该条件适用的矩阵给出所有位置。
Matlab示例: [a,b] = find(heMap> =(max(max(heMap))));
那么我如何才能在opencv中满足获取特定最大值或最小值的条件。请帮助
问候
目前我正在使用这种方式
double getMaxValue(Mat hemap)
{
MatConstIterator_<double> it = hemap.begin<double>(), it_end = hemap.end<double>();
double maxdata=0;
for(; it != it_end; ++it)
{
if(*it>maxdata)
{
maxdata = *it;
}
}
return maxdata;
}
答案 0 :(得分:1)
我不知道任何内置函数,这正是如此。您可以将矩阵与一个给出布尔矩阵的元素进行比较。但我不知道任何能给你每个非零元素位置的函数,比如find
。
但是,循环遍历数组并自己进行比较非常简单:
int thresh = 50;
for(int y=0;y<matrix.rows; y++)
for(int x=0;x<matrix.cols; x++)
if( matrix.at<uchar>(y,x) >= thresh)
printf(" (%d,%d) = %d\n",x,y, matrix.at<uchar>(y,x));
答案 1 :(得分:0)
cv::compare
函数怎么样,它将每个像素与给定数字进行比较,如果满足条件,则将输出数组设置为255,等等。
答案 2 :(得分:0)
我给你一个2 + 1步解决方案:
minMaxLoc()
- &gt;获得最大值MAX_VAL。
使用inRange(input, max_val, max_val, output_mask)
将所有最大元素设为白色。
决定如何处理这些位置。
比如,你可以很容易地发现热点,最大的斑点或
连接的max-es组件。 (扩张和侵蚀然后
在现场中心使用floodFill,一个接一个。)