gpt4 book ai didi

c++ - minMaxLoc 数据类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:37 26 4
gpt4 key购买 nike

我已经被这个问题困扰了很长一段时间。你能帮我知道吗,Opencv 中的 minMaxLoc() 在查找 Mat 变量的最大值、最小值时考虑了什么数据类型?我从该函数中获得了某个值,但我不知道该值实际代表什么,以什么数据类型表示?

    Laplacian(src_gray,dst,ddepth,kernel_size,scale,delta,BORDER_DEFAULT);
minMaxLoc(dst,&min,&estimate,&minLoc,&maxLoc,noArray());

'estimate' 的值大约在 1000 左右,而如果我尝试使用

访问 'dst' Mat 变量的值
    dst.at<datatype>(k,l)

我得到的值很模糊,从 124、125(uchar)到 2,xxx,xxx,xxx(如果我使用 long int)。 minMaxLoc 函数实际给出的值是多少?请帮助我。

最佳答案

min 和 estimate 应该是 double 类型,我认为它们是正确的。问题可能出在您访问

dst.at<datatype>(k,l)

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

#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

你可以在第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))

例如

#define CV_8UC4 CV_MAKETYPE(CV_8U,4)

有类型

0+((4-1) << 3) == 24

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

关于c++ - minMaxLoc 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com