Python基于YCbCr 肤色模型的情色图片检测的简单实现

<span style="color: rgb(54, 46, 43); font-family: Arial; font-size: 14px; line-height: 26px;"><strong>Python基于YCbCr 肤色模型的情色图片检测的简单实现</strong></span>
#Detection of Pornographic Digital Images
#YCbCr Model
#author:Robin chen
#input:the dir of an image
'''
ref:
1.http://www.naun.org/multimedia/NAUN/computers/20-462.pdf
2.http://blog.csdn.net/gzlaiyonghao/article/details/3166735
'''
from PIL import Image
import sys
def image_ifo(image):
    try:
        img = Image.open(image)
    except Exception,e:
        print "Can not open the image!"
    print 'Image Mode:%s,Image Size:%s,Image Format:%s' % (img.mode,img.size,img.format)
    return img
def preprocessed_image(image):
    img = image_ifo(image)
    if not img.mode 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 首先,我们需要导入一张图。可以使用imread函数来读取一张图,函数的参数为图的文件路径。 ```matlab img = imread('your_image.jpg'); ``` 2. 我们将图像转换为YCbCr色彩空间,可以使用rgb2ycbcr函数。 ```matlab ycbcr_img = rgb2ycbcr(img); ``` 3. 由于YCbCr色彩空间中的Cb和Cr通道是色度信息,通常我们只关注Y通道,即亮度信息。所以我们只需要提取出Y通道即可。 ```matlab y = ycbcr_img(:, :, 1); ``` 4. 接下来,我们需要对Y通道进行肤色检测肤色检测的方法有很多,这里我们使用一种简单的方法:根据YCbCr肤色模型中的Cr和Cb阈值来检测肤色。 ```matlab % 设置阈值 cb_min = 77; cb_max = 127; cr_min = 133; cr_max = 173; % 进行肤色检测 skin_mask = ycbcr_img(:,:,2)>=cb_min & ycbcr_img(:,:,2)<=cb_max & ... ycbcr_img(:,:,3)>=cr_min & ycbcr_img(:,:,3)<=cr_max; ``` 5. 最后,我们可以将肤色部分标记出来。这里我们选择使用imshow函数来展示标记后的图像。 ```matlab % 将肤色部分标记为红色 red = cat(3, ones(size(img)), zeros(size(img)), zeros(size(img))); red(skin_mask) = 1; % 在原图上标记肤色部分 marked_img = img + 100*red; % 展示标记后的图像 imshow(marked_img); ``` 完整代码如下: ```matlab % 导入图 img = imread('your_image.jpg'); % 将图像转换到YCbCr色彩空间 ycbcr_img = rgb2ycbcr(img); % 提取Y通道 y = ycbcr_img(:, :, 1); % 设置阈值 cb_min = 77; cb_max = 127; cr_min = 133; cr_max = 173; % 进行肤色检测 skin_mask = ycbcr_img(:,:,2)>=cb_min & ycbcr_img(:,:,2)<=cb_max & ... ycbcr_img(:,:,3)>=cr_min & ycbcr_img(:,:,3)<=cr_max; % 将肤色部分标记为红色 red = cat(3, ones(size(img)), zeros(size(img)), zeros(size(img))); red(skin_mask) = 1; % 在原图上标记肤色部分 marked_img = img + 100*red; % 展示标记后的图像 imshow(marked_img); ``` 注:此代码仅是一个简单肤色检测实现,可能会存在一些误检和漏检。在实际应用中应该考虑使用更加复杂的肤色检测算法来提高准确率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值