基质中的最小强度

Minimum intensity in matrix

本文关键字:小强      更新时间:2023-10-16

我创建了以下函数来使用 opencv 计算图像矩阵中强度最小的点。但是,我总是将点 0,0 作为最小强度的点,并且强度值也像 -2142484923 一样荒谬。有人可以帮忙吗?

img 是输入图像矩阵,Minloc 以最小强度返回 cvPoint。

int min_Loc(Mat img, Point minloc)
{
    cvtColor(img, img, CV_RGB2GRAY); 
    int x1;
    int y1;
    int x2;
    int y2;
    x1 = 0;
    x2 = img.rows;
    y1 = 0;
    y2 = img.cols;
    int min = std::numeric_limits< int >::max();
    int currentval;
    for (int j=y1; j<y2; j++)
    {
        for (int i=x1; i<x2; i++){
            currentval = img.at<int>(j,i);
            if(currentval < min){
                min = std::min<int>( currentval, min );
                minloc.x = i;
                minloc.y = j;
            }
        }
    }
    return min;

}

你的函数

int min_Loc(Mat img, Point minloc)

不返回明洛克。它返回一个整数,并按值获取一个垫子和一个点。如果您希望能够修改 minloc 的值并在调用 min_Loc() 后保留该值,则应使用指针或引用作为参数,例如:

int min_loc(Mat * img, Point * minloc)
{
...
minloc->x = i;
minloc->y = j;
...
return min;
}

对该函数的调用如下所示:

min_loc(&img, &minloc);

这假设您在该调用之前有类似以下内容的某个地方:

Mat img = ...;
Point minloc = ...;

更多信息:何时通过引用传递以及何时通过指针传递C++?

请注意,OpenCV 提供了在函数 cv::minMaxLoc 中查找(单通道)矩阵的最小值和最大值及其位置的功能