黄色识别

黄色-图片自动识别是一个涉及到图像处理、模式识别、机器学习、统计概率的综合领域,其关键技术包括:皮肤检测、人脸检测、连通区域分析、贝叶斯分类、支持向量机等等

关于绿-坝是如何实现的,我一直很感兴趣。我这边也有一些相关的工作心得,拿出来与大家分享一下。

第一步是皮肤检测。
肤色检测并不像我们想象那样简单,要做到不同光照下的肤色识别,并不是只要指定一个所谓的“肉色”的RGB区域那么容易。一般采用转换到HSV色彩空间+变换的方式获得概率模型。
我在获得概率模型之后,用一个二值的Mask去与原图像做&操作,得到如下的结果:

很直观的一点是,非零区域所占面积大的图片很可能是黄色-图片,反之则是正常图片

第二步是连通区域分析。
大块的部分更有可能是手臂、躯干,而孤立地小块很可能是噪声

第三步就是脸部检测
这里采用的是Haar小波特征


脸部检测的作用,其一在于,肤色检测往往会召回某些脸部面积占据较大区域的照片,而这部分图片可以认为是脸部特写,并不属于黄色-图片,比如:


脸部检测的作用,其二在于,往往可以根据脸部的位置来判断身体的位置,从而部分解决肤色模型的准确率问题。


由于室外光照的原因,第一步肤色检测的效果并不是很好,背景很多地方都被误召回了。但是,我们可以根据脸部的大小,推算出躯干的位置以及大小。


由于程序检测是红色区域为脸部,那么人体的躯干应该是在绿色区域以内,所以我们不必费力去检测绿框以外的部分。而内部的区域检测出的肤色区域很小,因此,这是一张正常图片。

上述三步的阈值如果凭经验而定往往不科学,因此最终的第四步就是训练,比如SVM、决策树或者贝叶斯分类器,具体机器学习方法的选择,目前我正在进行一些测试。

顺道感谢一下测试模特:苍井空小姐~

要同时识别绿色和黄色区域并计算它们的面积,您可以按照以下步骤进行操作: 1. 读取图像并转换为HSV颜色空间 2. 定义要检测的绿色和黄色范围(在HSV颜色空间中) 3. 对图像进行颜色分割,分别提取绿色和黄色区域 4. 对提取的绿色和黄色区域进行二值化处理,得到二值图像 5. 对二值图像进行形态学处理,去除噪点并填充空洞 6. 利用cv2.findContours函数找到绿色和黄色区域的边界 7. 计算绿色和黄色区域的面积 以下是使用Python和OpenCV进行绿色和黄色识别计算面积的示例代码: ```python import cv2 import numpy as np # 读取图像 img = cv2.imread('image.jpg') # 转换为HSV颜色空间 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 定义绿色范围 lower_green = np.array([45, 100, 50]) upper_green = np.array([75, 255, 255]) # 定义黄色范围 lower_yellow = np.array([20, 100, 100]) upper_yellow = np.array([30, 255, 255]) # 颜色分割,提取绿色和黄色区域 mask_green = cv2.inRange(hsv, lower_green, upper_green) mask_yellow = cv2.inRange(hsv, lower_yellow, upper_yellow) # 二值化处理 _, thresh_green = cv2.threshold(mask_green, 0, 255, cv2.THRESH_BINARY) _, thresh_yellow = cv2.threshold(mask_yellow, 0, 255, cv2.THRESH_BINARY) # 形态学处理 kernel = np.ones((5,5), np.uint8) opening_green = cv2.morphologyEx(thresh_green, cv2.MORPH_OPEN, kernel) opening_yellow = cv2.morphologyEx(thresh_yellow, cv2.MORPH_OPEN, kernel) # 查找轮廓 contours_green, hierarchy_green = cv2.findContours(opening_green, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) contours_yellow, hierarchy_yellow = cv2.findContours(opening_yellow, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 计算绿色和黄色区域的面积 area_green = 0 for cnt in contours_green: area_green += cv2.contourArea(cnt) area_yellow = 0 for cnt in contours_yellow: area_yellow += cv2.contourArea(cnt) print('绿色区域的面积为:', area_green) print('黄色区域的面积为:', area_yellow) ``` 注意,如果图像中有重叠的绿色和黄色区域,它们的面积将被重复计算。为了避免这种情况,您可以使用cv2.bitwise_and函数将绿色和黄色区域的二值图像进行按位与操作,得到它们的交集,然后再进行形态学处理和计算面积。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值