编程语言告诉你军训过后你黑了几度?

    作者:课课家教育更新于: 2019-09-24 15:05:10

    大神带你学编程,欢迎选课

    拍个自拍,让Python告诉你,军训过后你黑了几度?编程语言往往使程序员能够比使用机器语言更准确地表达他们所想表达的目的。对那些从事计算机科学的人来说,懂得程序设计语言是十分重要的,因为在当今所有的计算都需要程序设计语言才能完成。

    军训前和军训后,就是“白古”和“黑古”的差别啊!想知道自己军训后究竟晒黑了多少么?下面文摘菌就带你用Python看看,自己究竟军训后黑了几个度。

    编程语言告诉你军训过后你黑了几度_编程语言_python_python教程_课课家

    大数据文摘出品

    作者:曹培信、宁静

    一年一度的大学开学季,一年一度的军训季。

    在六月中旬高考结束之后,万千学子迎来了他们人生中最长也是最无忧无虑的假期,到了八月底九月初,他们将踏上人生的一段重要旅程——大学。

    然而等待他们的第一课,便是军训。

    每所高校对军训的要求不同,从时间来看,短的只有5天,长的多达一个月,根据网上一份军训时间排行榜,比如清华大学,以34天稳居第二。(警校排第一也是无可厚非了,不过吉林的院校确实热衷军训,前十中两所吉林的院校上榜)

    除了一些开始又晚、时间又长的院校(比如重庆大学),大部分院校的军训应该已经结束了,然而经历了军姿、齐步、正步、阅兵甚至拉练的“摧残”后,军训岁月在身上留下的最深的痕迹便是——晒!黑!了!

    图片来自网络

    军训前和军训后,就是“白古”和“黑古”的差别啊!想知道自己军训后究竟晒黑了多少么?下面文摘菌就带你用Python看看,自己究竟军训后黑了几个度。

    基于RGB和YCbCr颜色空间的混合肤色检测

    想知道自己的皮肤颜色,首先要将皮肤检测出来。

    肤色检测有很多方法,比如:

    • 基于RGB的颜色空间模型;
    • 基于椭圆皮肤模型的皮肤检测;
    • YCrCb颜色空间Cr分量+Otsu法阈值分割;
    • 基于YCrCb颜色空间Cr,Cb范围筛选法;
    • HSV颜色空间H范围筛选法;
    • opencv自带肤色检测类AdaptiveSkinDetector;

    2004年,Georgy Kukharev和Adam Nowosielski为了提高模型的稳定性,将多个颜色空间结合,提出RGB颜色空间和YCbCr颜色空间的混合肤色检测器。像素值满足如下条件:

    实现的代码也很简单,首先引入必要的包:

    1. import cv2 
    2. import numpy as np 
    3. from matplotlib import pyplot as plt 

    然而操纵图像,将RGB颜色空间3通道的值和YCbCr颜色空间3通道的值结合起来,然后根据判别条件进行肤色检测:

    1. def skin_color(imgFile): 
    2.  
    3.  
    4.         # load an original image 
    5.         img = cv2.imread(imgFile) 
    6.  
    7.  
    8.         rows,cols,channels = img.shape 
    9.  
    10.  
    11.         # convert color space from rgb to ycbcr 
    12.         imgYcc = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB) 
    13.           
    14.         # convert color space from bgr to rgb                         
    15.         img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 
    16.           
    17.         # prepare an empty image space 
    18.         imgSkin = np.zeros(img.shape, np.uint8) 
    19.         # copy original image 
    20.         imgimgSkin = img.copy() 
    21.  
    22.  
    23.         s=0 
    24.         sum_R=sum_G=sum_B=0 
    25.         for r in range(rows): 
    26.             for c in range(cols): 
    27.                  
    28.                 # non-skin area if skin equals 0, skin area otherwise         
    29.                 skin = 0 
    30.  
    31.  
    32.                 # get values from rgb color space 
    33.                 R = img.item(r,c,0) 
    34.                 G = img.item(r,c,1) 
    35.                 B = img.item(r,c,2) 
    36.                  
    37.                 # get values from ycbcr color space    
    38.                 Y = imgYcc.item(r,c,0) 
    39.                 Cr = imgYcc.item(r,c,1) 
    40.                 Cb = imgYcc.item(r,c,2)                                                                                                                                         
    41.                 # skin color detection 
    42.                  
    43.                 if R > G and R > B: 
    44.                     if (G >= B and 5 * R - 12 * G + 7 * B >= 0) or (G < B and 5 * R + 7 * G - 12 * B >= 0): 
    45.                         if Cr > 135 and Cr < 180 and Cb > 85 and Cb < 135 and Y > 80: 
    46.                          # print 'Skin detected!' 

    参考链接:https://blog.csdn.net/shadow_guo/article/details/43635181

    对比色卡,看看你黑了几度

    检测出了皮肤的区域,我们就需要将皮肤区域的颜色RGB值计算出来,然后与色卡进行对比。

    说到色卡,不得不提到Pantone(潘通)——一家专注于研究颜色的公司,以其Pantone颜色匹配系统(PMS)而闻名,该系统被广泛用于各种行业,特别是平面设计,时装设计,产品设计,印刷和制造,并支持从设计到生产的色彩管理。

    2013年,潘通发布了一款彩通肤色指南(PANTONE SkinTone Guide),这个指南根据科学测量各种人类皮肤类型中数千种实际肤色而建立,为再现实体肤色而配制,被称为人类肤色的完整视觉参考。

    110种人类肤色被从1Y01 SP至4R15 SP编号,适用于各个人种。

    文摘菌从中选取了比符合中国人肤色的1Y01-1Y13作为对比色卡。

    从左至右依次为0-12度

    然后将肤色颜色RGB与色卡的RGB数值进行对比,因为人眼对于R、G、B的敏感程度不同,在转换的时候需要给予不同的权重。

    人类视觉对绿色最敏感,因此它具有最大的系数值(0.7152),对蓝色最不敏感,因此具有最小的系数(0.0722)。

    1. def Compare(list,color): 
    2.     min=100 
    3.     count=len(list) 
    4.     for i in range(count): 
    5.         value=list[i] 
    6.         error=abs(color[0]-value[0])*0.2126+abs(color[1]-value[1])*0.7152+abs(color[2]-value[2])*0.0722 
    7.         if(error<min): 
    8.             min=error 
    9.             iindex=i         
    10.     return index+1 

    最后我们输入“白古”和“黑古”的图片,与比色卡的RGB数值进行对比,输出结果:

    1. if __name__ == '__main__': 
    2.      
    3.     img_before'images/before1.jpg' 
    4.     img_after='images/after.jpg' 
    5.     color_before=skin_color(img_before) 
    6.     color_after=skin_color(img_after) 
    7.     print("before:the extracted RGB value of the skin color is {0}".format(color_before)) 
    8.     print("after:the extracted RGB value of the color is {0}".format(color_after)) 
    9.     list=[(200, 172, 153), (200, 169, 149), (197, 166, 145), (194, 163, 142), (190, 157, 134), (187, 152, 129), (182, 146, 121), (177, 136, 108), (168, 127, 100), (160, 118, 90), (148, 108, 81), (135, 98, 73), (119, 87, 65)] 
    10.     #color_dir="skin_color" 
    11.     #skincolor.load_color(color_dir,list) 
    12.      
    13.     #print(list) 
    14.     #print(list) 
    15.     degree_before=Compare(list,color_before) 
    16.     degree_after=Compare(list,color_after) 
    17.     print("before:the degree of the skin color is {0}".format(degree_before)) 
    18.     print("after:the degree of the skin color is {0}".format(degree_after)) 

    输出的结果如下图所示:

    也就是说,“黑古”比“白古”整整黑了5个度,虽然文摘菌认为结果可能还有偏差,因为12是比色表的最高值,“黑古”很可能已经爆表了。

    军训结束,写代码的日子开始了

    也许当你拍下自己军训后的照片,用文摘菌的代码和自己一个月前的自拍对比了一下,然后留下了伤心的眼泪。

    文摘菌想告诉你:你不是一个人在战斗!

    今年参加军训的大学新生有数百万,短则5天,长则一个月的军训,风吹日晒,大家的皮肤变黑在所难免,然而,就算是1个月的军训,也并不能真正掌握多少军事技能,其实重要的还是原本初次见面还陌生的同班同学,通过军训开始熟络起来;原本还陌生的校园,也齐步走了几个来回。

    可以说,军训是大学的预科班,结束了军训,就正式开始了大学生活。

    文摘菌本着行业内人士的身份,自然要对那些报读计算机相关专业的新生们说一句:军训结束,你们写代码的日子就要开始了!

    也许在某个深夜,当你停下敲击键盘的双手,抚摸着额前稀疏的头发,你可能会意识到,原来军训并不是大学最痛苦的时候。

    在过去的几十年间,大量的编程语言被发明、被取代、被修改或组合在一起。尽管人们多次试图创造一种通用的程序设计语言,却没有一次尝试是成功的。之所以有那么多种不同的编程语言存在的原因是,编写程序的初衷其实也各不相同;新手与老手之间技术的差距非常大,而且有许多语言对新手来说太难学;还有,不同程序之间的运行成本(runtime cost)各不相同。

课课家教育

未登录

1