minMaxLoc数据类型

Lak*_*nan 4 c++ opencv image-processing computer-vision

我被这一段时间困扰了很久.你可以帮我知道,Opencv中minMaxLoc()的数据类型是什么,同时找到Mat变量的max,min值?我从函数中得到了一定的值,但我不知道这个值实际代表了什么,以及在什么数据类型?

    Laplacian(src_gray,dst,ddepth,kernel_size,scale,delta,BORDER_DEFAULT);
    minMaxLoc(dst,&min,&estimate,&minLoc,&maxLoc,noArray());
Run Code Online (Sandbox Code Playgroud)

'估计'的值大约在1000左右,而如果我尝试访问'dst'Mat变量的值,使用

    dst.at<datatype>(k,l)
Run Code Online (Sandbox Code Playgroud)

我得到了模糊的值,从124,125开始为uchar,到2,xxx,xxx,xxx,如果我使用long int.minMaxLoc函数实际给出的值是多少?请帮我.

Ham*_*mer 12

min和估计应该是double类型,我认为它们是正确的.问题可能在于您访问

dst.at<datatype>(k,l)
Run Code Online (Sandbox Code Playgroud)

正如Abhishek Thakur所说,输出取决于你的输入.如果您对矩阵的类型感到困惑,可以查看dst.type(),它返回一个整数,对应于从第557行开始的types_c.h中定义的列表.单通道类型或"深度"的定义是

#define CV_8U   0
#define CV_8S   1 
#define CV_16U  2
#define CV_16S  3
#define CV_32S  4
#define CV_32F  5
#define CV_64F  6
Run Code Online (Sandbox Code Playgroud)

您可以在第573行查看用于计算其他类型标识符的公式

#define CV_CN_SHIFT   3
#define CV_DEPTH_MAX  (1 << CV_CN_SHIFT)

#define CV_MAT_DEPTH_MASK       (CV_DEPTH_MAX - 1)
#define CV_MAT_DEPTH(flags)     ((flags) & CV_MAT_DEPTH_MASK)

#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))
Run Code Online (Sandbox Code Playgroud)

例如

#define CV_8UC4 CV_MAKETYPE(CV_8U,4)
Run Code Online (Sandbox Code Playgroud)

有类型

0+((4-1) << 3) == 24
Run Code Online (Sandbox Code Playgroud)

所以对于4通道uchar图像,type()将返回24.从上面你可以看到类型的深度由整数类型的最后3位表示.如果您想要的只是深度(您不关心它有多少个通道),您可以直接使用dst.depth()

  • @LakshmiNarayanan U表示无符号,S表示签名,F表示浮点数.数字是涉及多少位.CV_16S表示16位有符号整数 (2认同)