2012-04-22 103 views
1

我已经检查了minMaxLoc,但它只是给出矩阵的最大和最小位置。我需要找到的是最大或等于其他数字。例如(abc> = 7),然后给出这个条件适用的矩阵中的所有位置。例如:OpenCV从矩阵中获取条件库的最大元素位置

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; 
} 

回答

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)); 
+0

感谢答复,我试过循环部分已经但是我想知道是否有反正我可以改变迭代部分与函数或东西...我试过上述代码在我的问题,我添加了编辑 – wolvorinePk 2012-04-22 12:56:03

0

如何cv::compare功能,每个像素与给定数量由255如果条件进行比较,并设置输出数组满足,否则为0

0

我给你一个2 + 1步解决方案:

  1. 得到最大程度的与minMaxLoc() - > MAX_VAL。

  2. 使用获得所有最大元素为白色。

  3. 决定如何处理这些位置。假设您可以轻松检测到热点,max-es的大块或max-es的连接组件。 (与扩张和侵蚀,然后 当场中心使用floodFill,一个接一个。)