我需要将OpenCV的图像数据类型转换为另一个第三方库的类型,反之亦然。这样做的好方法是什么?
目前我使用的是boost::bimap
,但也许是更清洁的解决方案。我最大的问题是,OpenCV使用这样的头宏定义所有类型:
#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
#define CV_8UC1 CV_MAKETYPE(CV_8U,1)
#define CV_8UC2 CV_MAKETYPE(CV_8U,2)
而另一个第三方库通过枚举定义其类型:
typedef enum {
PF_UNKNOWN = 0,
PF_8BIT = 10,
PF_GREYSCALE_8 = 11,
PF_RGB_8 = 12,
PF_16BIT = 20,
PF_GREYSCALE_10 = 21,
PF_GREYSCALE_12 = 22,
PF_GREYSCALE_14 = 23,
PF_GREYSCALE_16 = 24,
PF_RGB_444 = 25,
PF_RGB_555 = 26,
PF_RGB_565 = 27,
PF_RGBA_4444 = 28
.....
} tPixelFormat;
因此,我在创建地图时硬编码OpenCV值(这似乎是一种非常糟糕的方法)。