C++ OpenCV从矩阵中获取条件基最大元素位置
我已经检查了minMaxLoc,但它只给出了矩阵的最大和最小位置。我需要找到的是最大值或等于其他数字。e、 g.(abc>=7)然后给出该条件适用的矩阵中的所有位置 Matlab示例: [a,b]=find(heMap>=(max(max(heMap))) 那么,我如何满足opencv中的条件来获得特定的最大值或最小值呢。?好心帮忙 问候 目前我正在使用这种方式C++ OpenCV从矩阵中获取条件基最大元素位置,c++,opencv,matrix,max,C++,Opencv,Matrix,Max,我已经检查了minMaxLoc,但它只给出了矩阵的最大和最小位置。我需要找到的是最大值或等于其他数字。e、 g.(abc>=7)然后给出该条件适用的矩阵中的所有位置 Matlab示例: [a,b]=find(heMap>=(max(max(heMap))) 那么,我如何满足opencv中的条件来获得特定的最大值或最小值呢。?好心帮忙 问候 目前我正在使用这种方式 double getMaxValue(Mat hemap) { MatConstIterator_<double> it
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;
}
double getMaxValue(Mat hemap)
{
matconditor_uu=hemap.begin(),it_uend=hemap.end();
双maxdata=0;
for(;it!=it_end;++it)
{
如果(*it>maxdata)
{
maxdata=*it;
}
}
返回maxdata;
}
我不知道有什么内置函数可以做到这一点。您可以将矩阵与给出布尔矩阵的元素进行比较。但是我不知道有什么函数能给出每个非零元素的位置,比如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));
int thresh=50;
对于(int y=0;y,我不知道任何内置函数能做到这一点。你可以将你的矩阵与给出布尔矩阵的元素进行比较。但是我不知道任何函数能给出每个非零元素的位置,比如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));
int thresh=50;
对于(int y=0;y关于cv::compare
函数,它将每个像素与给定的数字进行比较,如果条件满足,则将输出数组设置为255,否则为0。关于cv::compare
函数,它将每个像素与给定的数字进行比较,如果条件满足,则将输出数组设置为255。2+1步解决方案:
使用minMaxLoc()
->max\u val获得最大值
使用范围(输入、最大值、最大值、输出掩码)中的
决定如何处理这些位置。
比如说,你可以很容易地检测到热点、大斑点或大斑点
最大es的连接部件(膨胀和腐蚀,然后
在现场中心逐个使用洪水填充。)
我给你一个2+1步骤的解决方案:
使用minMaxLoc()
->max\u val获得最大值
使用范围(输入、最大值、最大值、输出掩码)中的
决定如何处理这些位置。
比如说,你可以很容易地检测到热点、大斑点或大斑点
最大es的连接部件(膨胀和腐蚀,然后
在现场中心逐个使用洪水填充。)
谢谢你的回复,我已经试过循环部分了,但是我想知道是否有任何方法我可以用functor或其他什么来更改迭代部分…我在我的问题中尝试了上面的代码我添加了编辑一个hanks用于回复,我已经试过循环部分了,但是我想知道是否有任何方法我可以用functor o来更改迭代部分我在我的问题中尝试了上面的代码,我添加了编辑代码