本人声明:在本博客以及后续的博客中,全部代码都以C++形式进行实现,使用的数据类型为 HImage,而不是单纯的使用算子或Hobject 数据类型;不对之处,请大家指正;也请大牛不吝赐教;
Halcon 中对彩色图像进行分割的算子为:
decompose3(MultiChannelImge: Image1 : Image2: Image3::)
该算子的作用是将图像分为三个单通道图像;
MultiChannleImage: 输入的要进行分割的多通道图像,一般为三通道;
Image1: 转换的第一个通道图像,对应 Red 红色;
Image2:转换的第二个通道图像,对应Green 绿色;
Image3:转换的第三个通道图像,对应 Blue 蓝色;
而在C++中对应的接口为:HImage HImage::Decompose3(HImage* Image2, HImage* Image3) const
其中,Image2,对应转换的第二个通道,即绿色通道;Image3,对应转换的第三个通道,即蓝色通道;
转换后的第一个通道,即红色通道,为返回值;
其C++实现代码如下所示:
HImage hImg2;
hImg2.ReadImage("01.jpg");
HImage r, g, b;
r = hImg2.Decompose3(&g, &b);
showImage(r, IDC_PIC2);
// 将图片进行保存
r.WriteImage("jpg",0, "r.jpg");
g.WriteImage("jpg",0, "g.jpg");
b.WriteImage("jpg",0, "b.jpg");
处理后的 R、G、B 图像如下图所示:
其中,从左到右依次为 R通道、G通道、B通道;使用OpenCV 进行验证,图像如下所示:
可以看出,两种方式提取的图像完全一样;