OpenCV类型CV_32F和CV_32FC1之间的区别
c++
computer-vision
opencv
5
0

我想知道OpenCV类型CV_32F和CV_32FC1之间是否有区别?我已经知道32F代表“ 32bits浮点数”,而C1代表“单通道”,但可以理解进一步的解释。

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

预先感谢大家的帮助!

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

CV_32FCV_32FC1的值均为5 (请参见下面的说明),因此在数值上没有区别。

然而:

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

一些例子...

许多功能(例如SobelconvertTo )都需要目标深度(而不是通道数),因此您可以执行以下操作:

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

src.convertTo(dst, CV_32F);

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

Mat m(rows, cols, CV_32FC1);

基本上,每次您还应该指定通道数时,请使用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;
}

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号