轮廓处理之四

来源:互联网 发布:mac safari视频下载 编辑:程序博客网 时间:2024/05/16 18:25

今天本打算对一黄色网布做位置形状检查。用手机拍了一张白底的照片,放到电脑中处理。本以为按照标准流程,读图-〉灰度图-〉二值图-〉腐蚀或膨胀-〉查找外轮廓-〉求形心找最小外接矩形求倾斜角度。出叉了。由于光源不行,物体本身黄色(RGB:255,255,0),这种方式得到外轮廓基本没戏(如图1)

我们知道轮廓内外差别越大,轮廓越容易得到。注意到白色RGB为255,255,255;物体与背景在B通道上的差距明显。因此,是否可以在B通道上做识别呢?先尝试一下通道分离吧!

函数cvSplit()分别复制每个通道到多个单通道图像。

void cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1, CvArr* dst2, CvArr* dst3 );.cvSplit()函数将复制src的各个通道到图像dst0,dst1,dst2和dst3中。如果源图像少于4个通道的情况下,那么传递给cvSplit()的不必要的目标参数可设置为NULL。使用时注意,源图像const CvArr* src应为多通道图像;目标图像CvArr* dst0, CvArr* dst1, CvArr* dst2,和CvArr* dst3应为单通道图像,以上图像的size应该一样大。还有一点需要注意的是opencv中RGB通道顺序为 B G R。

从上图可以看出,蓝色通道对比度最高。因此用蓝色通道来二值化。

 

 

 

 

0 0