图片的美白与美化

简介: 图片的美白与美化

前面介绍了如何提取图像中的各种特征,包括颜色特征,几何特征、局部特征等,也进行了各种特征算法学习。那么本节我们来学习美化图片。众所周知,现在各大平台惊现“照骗”,修图技术的发展,让越来越多的人迷失在幻境中,男的批成女的,等等。对于我们计算机专业的学生来说,理解这些功能的底层代码是非常重要的。


添加图形与文字


基础线条图形操作


首先给图片增加一条线或者一些多边形,除了这些,还可以增加一些特殊的图案。一般来说,增加形状的函数由如下几个参数:原图(img)、增加的图型中心(center)、图形的大小(size)、颜色(color)、线条粗细(thinkness)。常用的函数:cv2.circle()画一个圆,cv2.fillPoly()画一个任意多边形、cv2.line()画一条线等。


import cv2
import numpy as np
img=cv2.imread('F:\Image\\test11.jpg')
w,h,d=img.shape
#加圆
cv2.circle(img,(int(w/3),int(h/2)),int(w/4),(0,0,255),2)
cv2.imshow('显示图片',img)
cv2.waitKey()


4cb56fdcea64b50792820bae56c80fb0_880152c9d1c248d5b7a57707299fb845.png


爱心图片


当然,除了这种简单的图形,还可以来点复杂的,比如在你和你的女朋友之间加一个爱心。


博主没有女朋友,也没有合照,只能随便用一张图片了。


71d5b2519b03788b9820838ac8947e95_69b17779ab804a4fa93c1879ca62db24.jpeg


言归正传,下面来展示如何画爱心:


import cv2
import numpy as np
img=cv2.imread('F:\Image\\test8.jpg')
#绘制椭圆弧
cv2.ellipse(img,(100,350),(100,200),180,30,150,(0,0,255),1)
cv2.ellipse(img,(275,350),(100,200),180,30,150,(0,0,255),1)
#绘制直线
cv2.line(img,(12,250),(187,450),(0,0,255),1)
cv2.line(img,(362,250),(187,450),(0,0,255),1)
#显示图片
cv2.imshow('2',img)
cv2.waitKey(0)


2ac20053ea4978adbf630d218c404fb4_974f9d2f22884f73b39702f008d9dcc3.png


爱心就显示出来了,当然,就一个爱心可是不够的,是不是应该在图像上加一句爱她的话喃,话不多说,安排!


OpenCV中绘制文字的函数cv2.putText(),可选参数有img(输入图片)、text(输入文字)、origin(文字左上角坐标)、font(字体)、scale(大小)、color(颜色)、thinkness(线条粗细)。


import cv2
import numpy as np
img=cv2.imread('F:\Image\\test8.jpg')
w,h,d=img.shape
#绘制椭圆弧
cv2.ellipse(img,(100,350),(100,200),180,30,150,(0,0,255),1)
cv2.ellipse(img,(275,350),(100,200),180,30,150,(0,0,255),1)
#绘制直线
cv2.line(img,(12,250),(187,450),(0,0,255),1)
cv2.line(img,(362,250),(187,450),(0,0,255),1)
#加入文字
cv2.putText(img,'I love you',(0,int(h/1.5)),cv2.FONT_HERSHEY_PLAIN,4,(0,0,255),0)
#显示图片
cv2.imshow('2',img)
cv2.waitKey(0)


472ba7991ca6e64d016a2d389b7fe8ff_fa583bba02b648deb2eb041d45130eb8.png


现在就可以送给你们的女朋友了。


图像美白


了解了一些简单的操作,现在开始我们真正的修图。磨皮,美白。


所谓的美白,其实就是将图像的亮度提高,可以在HSV颜色空间中进行提高亮度V即可,也可以在RGB模式下将颜色调为白色。


import numpy as np
import cv2
img=cv2.imread('F:\Image\\test10.jpg')
w,h,d=img.shape
#增强亮度
for i in range(w):
    for j in range(h):
        (b,g,r)=img[i,j]
        b=min(255,b+40)
        g=min(255,g+40)
        r=min(255,r+40)
        img[i,j]=(b,g,r)
#显示图片
cv2.imshow('1',img)
cv2.waitKey(0)



对比一下,是不是黑人小哥变白了。但是这个只是进行打光,美白的操作也和这个差不多。但是需要注意的是,美白更注重白色,所以对红色部分就不需要改变,而是按照比例对绿色,蓝色进行提高。同时,我们在美白的时候,需要对人体美白,而不是所有,所以最后好是对指定区域进行美白。


#进行美白,注意单个颜色不能超过255
for i in range(w):
    for j in range(h):
        (b,g,r)=img[i,j]
        b=min(255,b*1.4)
        g=min(255,g*1.3)
        img[i,j]=(b,g,r)


这样进行处理后的图像就会白很多,如果要求比较高的,那么我们就进行磨皮。需要使用到cv2.bilateralFilter()函数,双边滤波与高斯滤波相比能更好的保存图像的边缘信息,这是由于其不但使用了一个与空间距离相关的高斯函数,还使用了一个与灰度距离相关的高斯函数。


img=cv2.bilateralFilter(img,10,30,30)

只需要将三部分进行结合一下,就大功告成了。来吧,展示:


import numpy as np
import cv2
img=cv2.imread('F:\Image\\test10.jpg')
w,h,d=img.shape
img=cv2.bilateralFilter(img,10,30,30)
#增强亮度
for i in range(w):
    for j in range(h):
        (b,g,r)=img[i,j]
        b=min(255,b+40)
        g=min(255,g+40)
        r=min(255,r+40)
        img[i,j]=(b,g,r)
#进行美白,注意单个颜色不能超过255
for i in range(w):
    for j in range(h):
        (b,g,r)=img[i,j]
        b=min(255,b*1.4)
        g=min(255,g*1.3)
        img[i,j]=(b,g,r)
#显示图片
cv2.imshow('1',img)
cv2.waitKey(0)



是不是白了很多喃。快去给你的女友试试吧。


图片直方图均衡化

前面介绍了一些简单的操作,当然不能就这么简单,我们来试试直方图均衡话图像。简单的来说,就是将图片的色彩均衡化,让图片更加饱满,看起来不那么违和。前面介绍了直方图的函数,这里就不过多介绍了。下面我们用一个小姐姐的图片来演示一下。


import cv2
import numpy as np
img=cv2.imread('F:\Image\\test4.jpg')
#进行直方图均衡化
#通道分解
(b,g,r)=cv2.split(img)
b=cv2.equalizeHist(b)
g=cv2.equalizeHist(g)
r=cv2.equalizeHist(r)
#通道合成
result=cv2.merge((b,g,r))
#图片展示
cv2.imshow('1',img)
cv2.waitKey(0)



第一张图是经过处理后的图片,第二张则是原图,可以对比一下,两种图片差别很小,但是第一张的色彩更饱和一点。其他的博主我也看不出来,这个只是给大家一个示范。

相关文章
|
6月前
|
前端开发 JavaScript
无缝滚动图片——源码
无缝滚动图片——源码
|
6月前
|
前端开发 JavaScript UED
页面美化
页面美化
91 2
|
前端开发
如何用css显示一个图片中多个小图标
如何用css显示一个图片中多个小图标
Echarts实战案例代码(23):富文本实现坐标轴文字和图片排版的解决方案
Echarts实战案例代码(23):富文本实现坐标轴文字和图片排版的解决方案
206 0
|
6月前
|
容器
百度富文本上传图片后样式崩塌
百度富文本上传图片后样式崩塌
58 0
百度富文本上传图片后样式崩塌
Photoshop使用路径排版美化文字创作图案
Photoshop使用路径排版美化文字创作图案
108 0
|
编解码 Windows
用文字制作成图片
最近呢,我一个朋友要过生日,我像给她一个硬核的生日祝福。然后就想到了用文字拼成她的QQ头像
161 0
用文字制作成图片
|
Linux Shell
美化
美化
89 0
|
Java API Maven
一行代码搞定图片缩略图处理
不知道大家现在工作中还有没有使用过Java处理图片的。强哥在大学毕业后,从事服务端WEB开发,就很少接触图片处理。有接触图片的,大多也就是图片的上传下载。所以,对Java处理图片相关的技术也都没怎么接触。
一行代码搞定图片缩略图处理