草庐IT

图片的美白与美化

心随而动 2023-04-14 原文

 博主简介

博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c++,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的,如果有错误之处,大家可以指正。

专栏简介:   本专栏主要研究计算机视觉,涉及算法,案例实践,网络模型等知识。包括一些常用的数据处理算法,也会介绍很多的Python第三方库。如果需要,点击这里订阅专栏   。

给大家分享一个我很喜欢的一句话:“每天多努力一点,不为别的,只为日后,能够多一些选择,选择舒心的日子,选择自己喜欢的人!”


目录

添加图形与文字

基础线条图形操作

爱心图片

图像美白

 图片直方图均衡化


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

添加图形与文字

基础线条图形操作

首先给图片增加一条线或者一些多边形,除了这些,还可以增加一些特殊的图案。一般来说,增加形状的函数由如下几个参数:原图(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()

爱心图片

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

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

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


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)

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

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)

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

图像美白

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

所谓的美白,其实就是将图像的亮度提高,可以在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)

   (a)颜色直方图均衡化的图片                                    (b)原图

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

好了,本节的内容就到此结束了!关注博主不迷路,下一节我们学习图像的修复和去噪。拜拜了你嘞!

特别提醒:文章中所用的图片是博主从网上下载下来的,并无任何恶意,只是用来作为案例使用,如有侵权,告知博主!谢谢!

有关图片的美白与美化的更多相关文章

  1. ruby-on-rails - Ruby on Rails - 为文本区域和图片生成列 - 2

    我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数

  2. ruby-on-rails - Rails 3,在RAILS_ROOT上方显示来自本地文件系统的jpg图片 - 2

    我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。

  3. 最新版人脸识别小程序 图片识别 生成二维码签到 地图上选点进行位置签到 计算签到距离 课程会议活动打卡日常考勤 上课签到打卡考勤口令签到 - 2

    技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进

  4. ruby-on-rails - 带图片 uploader 的多步表单 - 2

    我想建立3步用户注册,在第2步上传头像。所以我遵循RyanBates的指南http://railscasts.com/episodes/217-multistep-forms.我正在使用CarrierWavegem来处理上传。但似乎我无法在用户session中存储上传的文件信息(我收到无法转储文件错误)。我在Controller中使用以下技术ifparams[:user][:img_path]@uploader=FirmImgUploader.new@uploader.store!(params[:user][:img_path])session[:img]=@uploaderpara

  5. ruby - 如何在 Ruby 中更新图片文件的 EXIF 标签? - 2

    标题说明一切。 最佳答案 我正在使用MiniExiftool,它是Perl的Exiftool的ruby​​接口(interface)。https://github.com/janfri/mini_exiftoolhttp://www.sno.phy.queensu.ca/~phil/exiftool/用法:exif=MiniExiftool.new(file_path)exif.date_time_original=Time.nowexif["captionextract"]="Thisismynewcaption"exif.sav

  6. css - 如何让我的背景图片只出现在 rails 4 的一页上? - 2

    我有一张背景图片,我无法只停留在一页上。我制作了一个带有一个主视图的欢迎Controller来显示它。我也在预编译我的Assets。背景显示得很好,但我的目标是只在我的home.html.erbView中显示背景图像。欢迎/home.html.erb:"lang="">title欢迎Controller:classWelcomeController样式表/welcome.css.scss:body{background:{image:asset-url("image.jpg");}}我的应用程序布局中有以下内容:在config/initializers/assets.rb中:Rails

  7. ruby - 编写代码美化器 - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion我想写一个代码美化器,我想用Ruby来做。有人可以告诉我一个开始的地方吗?我在网上看到了很多代码美化器,但是我从来没有遇到过任何关于如何编写代码美化器的教程。对于以前从未从事过任何项目(例如编写编译器、解析器等)的人来说,这是一项非常具有挑战性的任务吗?(除了C/C++之外,还有其他更适合这种任务的语言吗?)

  8. ruby - prawn - 从 URL 导入图片 - 2

    我似乎无法弄清楚如何从url导入图像要从我使用的本地主机导入图像:image"./assets/images/img.png"当我用它说的URL替换路径时`image':URLnotfound是否有解决方案,或者我应该创建一个def来下载图像并使用它返回的路径? 最佳答案 您需要执行以下操作-require"open-uri"Prawn::Document.generate(INSERT_YOUR_PDF_FILENAME_HERE)doimageopen(INSERT_YOUR_URL_HERE)end引用http://rubyd

  9. ruby open-uri打开方法丢失文件扩展名打开图片 - 2

    我正在使用ruby​​1.9.2以及Rails3.1.4和Paperclip2.4.5。我的问题是尝试从URI保存回形针附件会丢失文件扩展名并保存文件而不会导致诸如需要扩展名的fancybox之类的问题。一些示例代码:uri="http://featherfiles.aviary.com/2012-06-13/bbe5f0de1/0c5a672b88ea47ecb4631ac173e27430.png"open(uri)#=>#因为临时文件上没有扩展名回形针正在保存文件而没有导致问题。有人遇到过这个问题吗?我已经看到关于使用回形针存储来自URI的图像的多个答案,但似乎没有一个解决我们正

  10. css - Sass 和 Compass 中的背景图片路径 - 2

    这个在config.rb文件中有提到images_dir="images"我在images文件夹中的元素中使用2个文件夹存放图像imagesimages/background/images/content/如果images/background/文件夹中有任何图像,那么我应该如何在cssbackground和Sass变量中添加图像路径?$header-img:"sass.gif";和background-image:url('sass.gif?1327592426');以及如何从每个背景图像中删除这个自动生成的?1327592426? 最佳答案

随机推荐