本篇目录:
一、分析照片基本信息
二、方法一(遍历图像,将像素值点替换修改为指定颜色)
三、修改图片颜色方法二(先转换图像格式再替换颜色值)
(1)、效果对比图
(2)、实现方法
四、总结
生活中,我们有时需要更换照片的底色,例如证件照,有需要蓝底的,也有需要红底的。给照片换底色实现方法有很多,用phothshop、各种图片修改装饰软件都能够做到。那么在计算视觉角度看,实现给照片换底色的方法如何实现呢?
我们来试一下测试一下。我们有一张蓝底的图片:
要处理好图片,首先要先了解图片的情况,我们来看一下这张图片的基本相关信息:
import cv2
img = cv2.imread('girl4b.jpg')
print(img)
information = img.shape
print(information)
img_size = img.size
print(img_size)
ima_type = img.dtype
print(ima_type)
cv2.imshow("window_name", img)
cv2.waitKey(0)
运行结果:
print(img)
[[[255 19 19]
[255 10 10]
[255 9 9]
...
[255 10 11]
[255 8 9]
[255 20 20]]
[[255 10 10]
[250 2 2]
[248 0 0]
...
...
...
[253 12 11]
[250 9 8]
[255 20 19]]]
print(information)
# 行、列、通道数量:
# 图像高度 × 图像宽度 × 图像通道数
(378, 350, 3)
img_size = img.size
print(img_size)
#图像大小:
396900
ima_type = img.dtype
print(ima_type)
#图像数据类型:unit8,8位无符号整型
uint8
把图像修改成白底的图,更改背景:蓝色→白色
粗糙的代码方法是:
import cv2
img = cv2.imread('girl4b.jpg')
information = img.shape
(b, g, r) = img[250, 250]
# 更改背景:蓝色---→白色
for row in range(information[0]):
for col in range(information[1]):
(b, g, r) = img[row, col]
if b >= 200: # 如果b通道值大于200(蓝色),就将该点替换为白色
img[row, col] = (255, 255, 255)
cv2.imwrite('girl4b_c30b_white.jpg', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行效果(并不理想):
图片背景大部分都被替换成了白色,但是人物脸部部分位置,肩膀部分的颜色也被替换成了白色,效果并部理想,需要更换修改颜色的方法。
先看一下转换效果对比图片:
先转换图像格式再替换颜色值,
图像格式资料可以参考以下博文:
计算机视觉基础__图像特征(位图和矢量图概念、图像的颜色特征、RGB 颜色空间、HSV 颜色空间、HLS 颜色空间、CMYK 颜色、Lab模式、索引模式、HSB色彩模式、灰度图、二值图)
①、导入模块
import cv2
import numpy as np
②、# 读取照片
image=cv2.imread('girl4b.jpg')
③、# 图片转换为二值化图
hsvimg = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
④、# 图片二值化黑白处理
lower_red = np.array([110,70,150])
upper_red = np.array([150,255,255])
hbimg = cv2.inRange(hsv, lower_red, upper_red)
⑤、#闭运算
k=np.ones((5,5),np.uint8)
r=cv2.morphologyEx(hbimg,cv2.MORPH_CLOSE,k)
⑥ 、#颜色替换
# 像素点为255表示的是白色,我们要将白色处的像素点,替换为红色
# 替换颜色,为BGR通道,不是RGB通道
rows,cols,channels = image.shape
for i in range(rows):
for j in range(cols):
if r[i,j]==255:
image[i,j]=(0,0,255)
⑦、#保存新图片
cv2.imwrite('girl4b_c32_red.jpg',image)
⑧、#无限等待,销毁内存
cv2.waitKey(0)
cv2.destroyAllWindows()
⑨、完整代码
import cv2
import numpy as np
image=cv2.imread('girl4b.jpg')
#修改尺寸
#image = cv2.resize(image,None,fx=0.8,fy=0.8)
hsvimg = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
cv2.imshow('hsvimg',hsvimg)
lower_red = np.array([110,70,150])
upper_red = np.array([150,255,255])
hbimg = cv2.inRange(hsvimg, lower_red, upper_red)
cv2.imshow('hbimg',hbimg)
k=np.ones((5,5),np.uint8)
r=cv2.morphologyEx(hbimg,cv2.MORPH_CLOSE,k)
cv2.imshow('yuantu',image)
rows,cols,channels = image.shape
for i in range(rows):
for j in range(cols):
if r[i,j]==255:
image[i,j]=(0,0,255)
cv2.imshow('red',image)
cv2.imwrite('girl4b_c32_red.jpg',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
给照片换底色只是最基础的计算机视觉应用之一,进一步,可扩展至人像抠图, 通用抠图(商品、动物、植物、汽车等抠图),天空替换(实现魔法换天空),视频人像抠图等领域。
推荐阅读:
计算机视觉__基本图像操作(显示、读取、保存) | 直方图(颜色直方图、灰度直方图) | 直方图均衡化(调节图像亮度、对比度) |
语音识别实战(python代码)(一) |
人工智能基础篇 |
计算机视觉基础__图像特征 |
matplotlib 自带绘图样式效果展示速查(28种,全) |
||
Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一) | ||
| | |
立体多层玫瑰绘图源码__玫瑰花python 绘图源码集锦 | Python 3D可视化(一) |
让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud) |
| | |
python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印 |
用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心) |
python爱心源代码集锦(18款) |
| | |
Python中Print()函数的用法___实例详解(全,例多) |
Python函数方法实例详解全集(更新中...) |
《 Python List 列表全实例详解系列(一)》__系列总目录、列表概念 |
| | |
用代码过中秋,python海龟月饼你要不要尝一口? | python练习题目录 |
|
| | |
草莓熊python turtle绘图(风车版)附源代码 | 草莓熊python turtle绘图代码(玫瑰花版)附源代码 |
草莓熊python绘图(春节版,圣诞倒数雪花版)附源代码 |
| | |
巴斯光年python turtle绘图__附源代码 |
皮卡丘python turtle海龟绘图(电力球版)附源代码 | |
| ||
vue3 项目搭建教程(基于create-vue,vite,Vite + Vue) | ||
| | |
2023年春节祝福第二弹——送你一只守护兔,让它温暖每一个你【html5 css3】画会动的小兔子,炫酷充电,字体特 | 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4套) |
SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例) |
| | |
【程序人生】卡塔尔世界杯元素python海龟绘图(附源代码),世界杯主题前端特效5个(附源码) | HTML+CSS+svg绘制精美彩色闪灯圣诞树,HTML+CSS+Js实时新年时间倒数倒计时(附源代码) | 2023春节祝福系列第一弹(上)(放飞祈福孔明灯,祝福大家身体健康)(附完整源代码及资源免费下载) |
| | |
Node.js (v19.1.0npm 8.19.3) vue.js安装配置教程(超详细) |
色彩颜色对照表(一)(16进制、RGB、CMYK、HSV、中英文名) |
2023年4月多家权威机构____编程语言排行榜__薪酬状况 |
| | |
手机屏幕坏了____怎么把里面的资料导出(18种方法) |
【CSDN云IDE】个人使用体验和建议(含超详细操作教程)(python、webGL方向) | 查看jdk安装路径,在windows上实现多个java jdk的共存解决办法,安装java19后终端乱码的解决 |
| | |
tomcat11、tomcat10 安装配置(Windows环境)(详细图文) |
Tomcat端口配置(详细) |
Tomcat 启动闪退问题解决集(八大类详细) |