上篇文章中,我们提到了萌颜sdk中,图像颜色空间、RGB和HSV色彩空间的基础知识,今天小编将继续介绍萌颜sdk中RGB和HSV转换的数学描述和函数实现,以及图像的色彩检测的具体步骤。
一、RGB和HSV转换的数学描述和函数实现
设(r,g,b)分别是一个颜色的红、绿、蓝坐标,它们的取值为0~1之间的实数。设max等价于r、g、b中的最大值,设min等于这些值中的最小值。要找到在HSV空间中的(h,s,v)值,这里的h属于[0,360],是角度的色相角,而s,v属于[0,1],是饱和度和亮度。利用这些数据将构建出一个RGB模型转换为HSV模型的函数。
此外,调用OpenCV中的cvtcolor()函数可以直接将RGB模型转换为HSV模型,RGB在OpenCV中存储为BGR的顺序,其数据结构为一个3D的numpy.array,索引的顺序是行、列、通道。
二、图片中的色彩检测
那么到这里,图片色彩检测的原理就比较好懂了,总的来说,每一种颜色都有自己的范围,可以通过颜色范围来分离图片中不同颜色的物体。我们来构建一个例子。
假设要检测某张人脸中的嘴唇区域,那么就先把图像变换到HSV空间,红色的H范围是160~179,S和V的范围为50~255,进行颜色分割后,理想的图像效果是:单张图像的颜色分割会很清晰,嘴唇区域分割轮廓很明确,图片中的其他红色区域也会被检测和标注出来。
整个程序的实现过程中,应用到了inRange()函数和bitwise_and()函数。
其中,inRange()函数:inRange(src,lowberb,upperb,dst=None)。功能是对于区间的颜色全部设置成255,其他设置为0,输出为一幅二值化的图像。Bitwise_and()函数:bitwise_and(src1,src2,dst=None,mask=None)。它的主要功能是对输入的两幅图像的像素进行加权求和。对于检测出来的红色区域形成一个mask,红色区域的像素为0,非红色区域为纯白,然后和原来的图像叠加,可以将红色区域保留下来。
以上,就是萌颜sdk中,图像色彩检测的过程,如果您对萌颜sdk开发感兴趣,欢迎咨询官方客服。
声明:本文由美狐原创,未经允许禁止转载,谢谢合作。