gpt4 book ai didi

c++ - OpenCV 类型 CV_32F 和 CV_32FC1 的区别

转载 作者:IT老高 更新时间:2023-10-28 22:33:17 24 4
gpt4 key购买 nike

我想知道 OpenCV 类型 CV_32F 和 CV_32FC1 之间是否有任何区别?我已经知道 32F 代表“32 位浮点”,C1 代表“单 channel ”,但我们将不胜感激。

如果是,它们有何不同/在哪些特定情况下我应该使用哪一个?您可能知道,openCV 类型可能会变得非常棘手......

提前感谢大家的帮助!

最佳答案

CV_32FCV_32FC1 的值都是 5(见下面的解释),所以数值上没有区别。

但是:

  • CV_32F 定义了矩阵每个元素的深度,而
  • CV_32FC1 定义了每个元素的深度和 channel 数。

几个例子...

许多功能,例如SobelconvertTo ,需要目标深度(并且不是 channel 数),因此您可以这样做:

Sobel(src, dst, CV_32F, 1, 0);

src.convertTo(dst, CV_32F);

但是,例如在创建矩阵时,还必须指定 channel 数,因此:

Mat m(rows, cols, CV_32FC1);

基本上,每次您还应该指定 channel 数时,使用CV_32FCx。如果您只需要深度,请使用 CV_32F


CV_32F定义为:

 #define CV_32F  5

CV_32FC1定义为:

#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_32FC1 CV_MAKETYPE(CV_32F,1)

计算结果为 5

您可以通过以下方式检查:

#include <opencv2\opencv.hpp>
#include <iostream>
int main()
{
std::cout << CV_32F << std::endl;
std::cout << CV_32FC1 << std::endl;

return 0;
}

关于c++ - OpenCV 类型 CV_32F 和 CV_32FC1 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37530368/

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