最近在MFC中搭建opencv环境,使用到了颜色管理功能,从CMFCColorButton控件得到的颜色值转换到CvScalar 遇到的一些问题。
CMFCColorButton: 为MFC中MFC color button control控件的类。暂且定义一个变量为color_button与控件关联
COLORREF:为c++中定义为typedef DWORD COLORREF;的变量。定义一个变量为 color_ref
CvScalar :为opencv中使用的颜色变量。定义一个变量为color_scalar
通过CMFCColorButton控件取得之后,使用color_ref= color_button.GetColor();获得控件选择的颜色值
在c++中如何将color_ref值分离出RGB三元色呢?找了好久资料发现,c++提供了三个宏定义:
GetRValue(color_ref)
GetGValue(color_ref)
GetBValue(color_ref)
这三个宏的定义原型为
#define GetRValue(rgb) (LOBYTE(rgb))
#define GetGValue(rgb) (LOBYTE(((WORD)(rgb)) >> 8))
#define GetBValue(rgb) (LOBYTE((rgb)>>16))
三个get宏就可以分别取得R、G、B的值。
再看CvScalar 结构体类型: color_scalar=cvScalar(GetRValue(color_ref),GetGValue(color_ref),GetBValue(color_ref)); 就可以完成颜色的赋值了。
注意CvScalar的原型为:
typedef struct CvScalar
{
double val[4];
}
CvScalar;
所以也可以使用val[0-2]进行赋值。