Image processing minMaxLoc最大值混淆

Image processing minMaxLoc最大值混淆,image-processing,opencv,computer-vision,vision,Image Processing,Opencv,Computer Vision,Vision,我一直在使用minMaxLoc计算通过在灰度图像上运行拉普拉斯滤波器获得的数据的最大值。我的简单意图是粗略估计锐度。我遇到了一个令人困惑的情况,我在这里已经讨论过了 对于一组图像,从minMaxLoc函数获得的最大值类似于1360、1456450等 Laplacian(src_gray,dst,ddepth,kernel_size,scale,delta,BORDER_DEFAULT); minMaxLoc(dst,&min,&estimate,&minL

我一直在使用minMaxLoc计算通过在灰度图像上运行拉普拉斯滤波器获得的数据的最大值。我的简单意图是粗略估计锐度。我遇到了一个令人困惑的情况,我在这里已经讨论过了

对于一组图像,从minMaxLoc函数获得的最大值类似于1360、1456450等

    Laplacian(src_gray,dst,ddepth,kernel_size,scale,delta,BORDER_DEFAULT);
    minMaxLoc(dst,&min,&estimate,&minLoc,&maxLoc,noArray());//Estimate is the max value
现在我只是试着计算平均值,以便更好地了解图像中锐度的分布。注意,DST是保存拉普拉斯数据的Mat变量

    Size s = dst.size();
    rows = s.height;
    cols = s.width;
    total = 0;
    max =  0;
    for(int k=0;k<rows;k++)
    {
      for(int l=0;l<cols;l++)
      {
        total = total + abs(dst.at<int>(k,l));
      }
    }
    average = total/(rows*cols);
Size s=dst.Size();
行=s高度;
cols=s.宽度;
总数=0;
max=0;

对于(int k=0;k我认为您应该使用.at而不是int(将图像视为灰度),否则该值将溢出!

我认为您应该使用.at而不是int(将图像视为灰度)否则该值将溢出!

通常图像有8位图像。因此,很可能是您使用错误的方法访问图像的像素。在这种情况下,您从矩阵中读取的值是错误的

要检查是否使用单通道整数矩阵,请使用

dst.type() == CV_32SC1 .
dst.type() == CV_8SC1 .
检查是否使用8位矩阵

dst.type() == CV_32SC1 .
dst.type() == CV_8SC1 .
如果您实际拥有这样一个8位整数矩阵,则需要使用
.at
访问像素


即使只向total变量添加了正值,total变量仍然为负值的原因可能是由于。您可以通过使用
长整型int
作为total来避免这种情况。

通常图像有8位图像。因此,很可能是您使用错误的方法访问图像的像素。在这种情况下,您读取的值来自矩阵的数据是错误的

要检查是否使用单通道整数矩阵,请使用

dst.type() == CV_32SC1 .
dst.type() == CV_8SC1 .
检查是否使用8位矩阵

dst.type() == CV_32SC1 .
dst.type() == CV_8SC1 .
如果您实际拥有这样一个8位整数矩阵,则需要使用
.at
访问像素


即使只向total变量添加了正值,total变量仍然为负值的原因可能是由于。可以通过对total使用
long int
来避免这种情况。

是否确定dst矩阵的类型为“int”?负值
total
可能是整数溢出的结果。如果使用相对值,则可能会发生这种情况ly large images.dst是一个Mat变量,我想它的值会是int。我不确定。非常感谢您指出这一点。您确定您的dst矩阵的类型为“int”吗?负的
total
可能是整数溢出的结果。如果您使用相对较大的images.dst是一个Mat变量,我认为值将是int。我不确定。非常感谢您指出这一点。对不起,但我想我不明白您的意思。您想让我用什么来代替int?对不起,但我想我不明白您的意思。您想让我用什么来代替int?我如何使用CV_32SC1,CV_8SC!变量?我是否缺少任何名称空间或clude头文件?我无法访问它。你能帮助我吗?我在linux中使用gcc opencv 2.4.3。
uchar
不是有符号8位矩阵的正确类型,
char
is。我如何使用该CV_32SC1,CV_8SC!变量?我是否缺少任何名称空间或包含头文件?我无法访问它。你能帮助我吗m在linux中使用gcc opencv 2.4.3。
uchar
不是有符号8位矩阵的正确类型,
char
是。