给照片换底色(python+opencv)

给照片换底色(python+opencv)

本篇目录:

一、分析照片基本信息

二、方法一(遍历图像,将像素值点替换修改为指定颜色)

  三、修改图片颜色方法二(先转换图像格式再替换颜色值)

(1)、效果对比图

(2)、实现方法

四、总结


一、分析照片基本信息

  生活中,我们有时需要更换照片的底色,例如证件照,有需要蓝底的,也有需要红底的。给照片换底色实现方法有很多,用phothshop、各种图片修改装饰软件都能够做到。那么在计算视觉角度看,实现给照片换底色的方法如何实现呢?

  我们来试一下测试一下。我们有一张蓝底的图片:

给照片换底色(python+opencv)_第1张图片

  要处理好图片,首先要先了解图片的情况,我们来看一下这张图片的基本相关信息:

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() 

  运行效果(并不理想):

  图片背景大部分都被替换成了白色,但是人物脸部部分位置,肩膀部分的颜色也被替换成了白色,效果并部理想,需要更换修改颜色的方法。

给照片换底色(python+opencv)_第2张图片

  三、修改图片颜色方法二(先转换图像格式再替换颜色值)

(1)、效果对比图

  先看一下转换效果对比图片:

给照片换底色(python+opencv)_第3张图片

(2)、实现方法

先转换图像格式再替换颜色值,

图像格式资料可以参考以下博文:

计算机视觉基础__图像特征(位图和矢量图概念、图像的颜色特征、RGB 颜色空间、HSV 颜色空间、HLS 颜色空间、CMYK 颜色、Lab模式、索引模式、HSB色彩模式、灰度图、二值图)

①、导入模块

import cv2
import numpy as np

②、# 读取照片

image=cv2.imread('girl4b.jpg')

、# 图片转换为二值化图

hsvimg = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)

给照片换底色(python+opencv)_第4张图片

④、# 图片二值化黑白处理

lower_red = np.array([110,70,150])
upper_red = np.array([150,255,255])
hbimg = cv2.inRange(hsv, lower_red, upper_red)

给照片换底色(python+opencv)_第5张图片

⑤、#闭运算

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)

给照片换底色(python+opencv)_第6张图片

⑧、#无限等待,销毁内存

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代码)(一)

 人工智能基础篇

 计算机视觉基础__图像特征

93d65dbd09604c4a8ed2c01df0eebc38.png

 matplotlib 自带绘图样式效果展示速查(28种,全)

074cd3c255224c5aa21ff18fdc25053c.png

Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)

fe88b78e78694570bf2d850ce83b1f69.png

cb4b0d4015404390a7b673a2984d676a.png

立体多层玫瑰绘图源码__玫瑰花python 绘图源码集锦

 Python 3D可视化(一)

 让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud)

e84d6708316941d49a79ddd4f7fe5b27.png

938bc5a8bb454a41bfe0d4185da845dc.jpeg

0a4256d5e96d4624bdca36433237080b.png

 python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印

 用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心)

python爱心源代码集锦(18款)

dc8796ddccbf4aec98ac5d3e09001348.jpeg

0f09e73712d149ff90f0048a096596c6.png

40e8b4631e2b486bab2a4ebb5bc9f410.png

 Python中Print()函数的用法___实例详解(全,例多)

 Python函数方法实例详解全集(更新中...)

 《 Python List 列表全实例详解系列(一)》__系列总目录、列表概念

09e08f86f127431cbfdfe395aa2f8bc9.png

用代码过中秋,python海龟月饼你要不要尝一口?

 python练习题目录

03ed644f9b1d411ba41c59e0a5bdcc61.png

daecd7067e7c45abb875fc7a1a469f23.png

17b403c4307c4141b8544d02f95ea06c.png

草莓熊python turtle绘图(风车版)附源代码

 ​草莓熊python turtle绘图代码(玫瑰花版)附源代码

 ​草莓熊python绘图(春节版,圣诞倒数雪花版)附源代码

4d9032c9cdf54f5f9193e45e4532898c.png

c5feeb25880d49c085b808bf4e041c86.png

 巴斯光年python turtle绘图__附源代码

皮卡丘python turtle海龟绘图(电力球版)附源代码

vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)

fea225cb9ec14b60b2d1b797dd8278a2.png

bba02a1c4617422c9fbccbf5325850d9.png

37d6aa3e03e241fa8db72ccdfb8f716b.png

2023年春节祝福第二弹——送你一只守护兔,让它温暖每一个你【html5 css3】画会动的小兔子,炫酷充电,字体特

 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4套)

SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例)

5d409c8f397a45c986ca2af7b7e725c9.png

6176c4061c72430eb100750af6fc4d0e.png

1f53fb9c6e8b4482813326affe6a82ff.png

【程序人生】卡塔尔世界杯元素python海龟绘图(附源代码),世界杯主题前端特效5个(附源码) HTML+CSS+svg绘制精美彩色闪灯圣诞树,HTML+CSS+Js实时新年时间倒数倒计时(附源代码)

 2023春节祝福系列第一弹(上)(放飞祈福孔明灯,祝福大家身体健康)(附完整源代码及资源免费下载)

80007dbf51944725bf9cf4cfc75c5a13.png

1ab685d264ed4ae5b510dc7fbd0d1e55.jpeg

1750390dd9da4b39938a23ab447c6fb6.jpeg

 Node.js (v19.1.0npm 8.19.3) vue.js安装配置教程(超详细)

 色彩颜色对照表(一)(16进制、RGB、CMYK、HSV、中英文名)

2023年4月多家权威机构____编程语言排行榜__薪酬状况

aa17177aec9b4e5eb19b5d9675302de8.png

38266b5036414624875447abd5311e4d.png

6824ba7870344be68efb5c5f4e1dbbcf.png

 手机屏幕坏了____怎么把里面的资料导出(18种方法)

【CSDN云IDE】个人使用体验和建议(含超详细操作教程)(python、webGL方向)

 查看jdk安装路径,在windows上实现多个java jdk的共存解决办法,安装java19后终端乱码的解决

fffa2098008b4dc68c00a172f67c538d.png

5218ac5338014f389c21bdf1bfa1c599.png

c6374d75c29942f2aa577ce9c5c2e12b.png

 tomcat11、tomcat10 安装配置(Windows环境)(详细图文)

 Tomcat端口配置(详细)

 Tomcat 启动闪退问题解决集(八大类详细)

你可能感兴趣的:(#,计算机视觉,opencv,python,人工智能,计算机视觉,机器学习)