图片的美白与美化

 博主简介

博主是一名大二学生,主攻人工智能研究。感谢让我们在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)原图

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

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

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

点赞加关注不迷路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/79.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python雪花代码

前言 用python画个雪花玩玩,源码在文末公众号哈。 雪花类 class Snow(): #雪花类 def __init__(self): self.r 6 #雪花的半径 self.x ra.randint(-1000,1000) #雪花的横坐标 self.y ra.randint(-500,5…

读书笔记——《富爸爸穷爸爸》

《富爸爸穷爸爸》,以前不屑读这种书。这种书就是那种走进书店放在门口展销位的成功学著作,一眼看上去没什么实在的内容,看上去很不靠谱,感觉就是骗一些社会底层又做着暴富梦的人来买的,但是由于自身原因或环境局限根本…

MySQL基本查询

文章目录表的增删查改Create(创建)单行数据 全列插入多行数据 指定列插入插入否则更新替换Retrieve(读取)SELECT列全列查询指定列查询查询字段为表达式查询结果指定别名结果去重WHERE 条件基本比较BETWEEN AND 条件连接OR 条件连…

【面试题】Python软件工程师能力评估试题(一)

文章目录前言应试者需知(一)Python 语言基础能力评估1、理解问题并完成代码:2、阅读理解代码,并在空白处补充完整代码:3、编写一个装饰器:exposer4、阅读代码并在空白处补充完整代码:5、自行用P…

嵌入式 串口通信

目录 1、通信的基本概念 1.1 串行通信 1.2 并行通信 2、串行通信的特点 2.1 单工 2.2 半双工 2.3 全双工 3、串口在STM32的引脚 4、STM32的串口的接线 4.1 STM32的串口1和电脑通信的接线方式 4.2 单片机和具备串口的设备连接图 5、串口通信协议 6、串口通信…

linux进程管理

进程管理 进程是启动的可执行程序的一个指令 1、进程简介 (1)进程的组成部分 已分配内存的地址空间安全属性,包括所有权凭据和特权程序代码的一个或多个执行线程进程状态 (2)程序和进程的区别 程序是一个静态的二进制…

第十四届蓝桥杯第三期模拟赛 C/C++ B组 原题与详解

文章目录 一、填空题 1、1 找最小全字母十六进制数 1、1、1 题目描述 1、1、2 题解关键思路与解答 1、2 给列命名 1、2、1 题目描述 1、2、2 题解关键思路与解答 1、3 日期相等 1、3、1 题目描述 1、3、2 题解关键思路与解答 1、4 乘积方案数 1、4、1 题目描述 1、4、2 题解关…

28岁小公司程序员,无车无房不敢结婚,要不要转行?

大家好,这里是程序员晚枫,又来分享程序员的职场故事了~ 今天分享的这位朋友叫小青,我认识他2年多了。以前从事的是土木行业,2年前找我咨询转行程序员的学习路线和职业规划后,通过自学加入了一家创业公司,成…

分享几个常用的运维 shell 脚本

今天咸鱼给大家分享几个不错的 Linux 运维脚本,这些脚本中大量使用了 Linux 的文本三剑客: awkgrepsed 建议大家这三个工具都要了解并最好能够较为熟练的使用 根据 PID 显示进程所有信息 根据用户输入的PID,过滤出该PID所有的信息 #! /b…

第十四届蓝桥杯三月真题刷题训练——第 11 天

目录 第 1 题:卡片 题目描述 运行限制 第 2 题:路径_dpgcd 运行限制 第 3 题:字符统计 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 第 4 题:费用报销 第 1 题:卡片 题…

我今天要彻底搞懂线程状态的变化

💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…

MATLAB | 这些花里胡哨的热图怎么画

好早之前写过一个绘制相关系数矩阵的代码,但是会自动求相关系数,而且画出来的热图只能是方形,这里写一款允许nan值出现,任意形状的热图绘制代码,绘制效果如下: 如遇到bug请后台提出,并去gitee下…

出道即封神的ChatGPT,现在怎么样了?

从互联网的普及到智能手机,都让广袤的世界触手而及,如今身在浪潮中的我们,已深知其力。前阵子爆火的ChatGPT,不少人保持观望态度。现如今,国内关于ChatGPT的各大社群讨论,似乎沉寂了不少,现在怎…

Linux IPC:匿名管道 与 命名管道

目录一、管道的理解二、匿名管道三、命名管道四、管道的通信流程五、管道的特性进程间通信方式有多种,本文介绍的是管道,管道分为匿名管道和命名管道。 一、管道的理解 生活中的管道用来传输资源,例如水、石油之类的资源。而进程间通信的管道…

学习C++这几个网站足矣

文章目录cppreferencecplusplus[C 之父的网站](https://www.stroustrup.com/bs_faq.html)C提案[Cpp Core Guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)[C Super-FAQ](https://isocpp.org/faq)[learn c](https://www.learncpp.com/)[Awesome C](h…

【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.59】引入ASPP模块

前言作为当前先进的深度学习目标检测算法YOLOv8,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv8的如何改进进行详细的介绍&…

1.10-1.12 Makefile

1. Makefile简介 举个栗子,如下为redis-5.0.10的项目目录,有很多的文件 有了Makefile文件,可以简单的make一下就可以对项目文件进行编译,最终生成可执行程序。 2. Makefile栗子1 首先,创建vim Makefile按照PPT里的格…

C++STL set/multiset容器 构造和赋值 大小和交换 插入和删除 查找和统计

文章目录set/multiset容器1 set容器 基本概念2 set容器 构造和赋值3 set容器 大小和交换4 set容器 插入和删除5 set容器 查找和统计set/multiset容器 1 set容器 基本概念 简介: 所有元素都会在插入时会被自动排序,例如,在set容器放入元素1、…

成本降低90%,OpenAI正式开放ChαtGΡΤ

今天凌晨,OpenAI官方发布ChαtGΡΤ和Whisper的接囗,开发人员现在可以通过API使用最新的文本生成和语音转文本功能。OpenAI称:通过一系列系统级优化,自去年12月以来,ChαtGΡΤ的成本降低了90%;现在OpenAI用…

公网远程连接Oracle数据库【内网穿透】

文章目录1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程OracleOracle,是甲骨文公司的一款关系数据库管理系…