gpt4 book ai didi

c++ - 在运行时构造 OpenCV 元素类型

转载 作者:太空狗 更新时间:2023-10-29 20:48:30 26 4
gpt4 key购买 nike

在 OpenCV 中,当我需要创建一个 cv::Mat 时,我需要按照以下方式做一些事情

cv::Mat new_mat(width, height, CV_32FC3)

如果我只知道我需要元素是 float 还是 double + 在运行时我是否需要 1/2/3 channel 会怎样?

换句话说,给定元素类型 (float) 和 channel 数 (int),我如何构造术语:CV_32FC3?

最佳答案

阅读 cxtypes.h 的源代码。它包含如下行:

#define CV_32FC1 CV_MAKETYPE(CV_32F,1)
#define CV_32FC2 CV_MAKETYPE(CV_32F,2)
#define CV_32FC3 CV_MAKETYPE(CV_32F,3)
#define CV_32FC4 CV_MAKETYPE(CV_32F,4)
#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))

#define CV_64FC1 CV_MAKETYPE(CV_64F,1)
#define CV_64FC2 CV_MAKETYPE(CV_64F,2)
#define CV_64FC3 CV_MAKETYPE(CV_64F,3)
#define CV_64FC4 CV_MAKETYPE(CV_64F,4)
#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))

CV_MAKETYPE 定义为:

#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))

这建议使用以下代码:

bool isdouble;
int nchannels;
// ...
if (isdouble) typeflag = CV_64FC(nchannels);
else typeflag = CV_32FC(nchannels);

我还没有测试过这个;让我知道它是否有效。另外:我讨厌 opencv 糟糕的类型安全。

关于c++ - 在运行时构造 OpenCV 元素类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3122667/

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