python:更换图片背景色

2020-09-23  本文已影响0人  胡童远

导读

使用python cv2模块识别、更换图片背景。

思路参考:20行代码教你用python给证件照换底色

一、安装、加载依赖

pip install opencv-python
import cv2
import numpy as np

二、读取图片

cv2.imread:读取
cv2.imshow:窗口展示
cv2.waitKey:等待

img = cv2.imread('wang.jpg') # 读取照片

cv2.imshow('img', img) # 显示图像
cv2.waitKey(0) # 窗口等待的命令,0表示无限等待

三、缩放图片

cv2.resize:缩放
image.shape:获取尺寸

1 原图尺寸

rows, cols, channels = img.shape
print(rows, cols, channels)

2 缩小后尺寸
img2 = cv2.resize(img, None, fx=0.5, fy = 0.5)

rows, cols, channels = img2.shape
print(rows, cols, channels)

3 缩小后图片
cv2.imshow('img', img2)
cv2.waitKey(0)

四、取背景色像素位置

1 图片转为灰度值

cv2.cvtColor():获取灰度值

hsv = cv2.cvtColor(img2, cv2.COLOR_BGR2HSV)

cv2.imshow('hsv',hsv)
cv2.waitKey(0)

2 二值化处理图片

cv2.inRange(hsv, lower, upper):
二值化处理,低于lower和高于upper的部分分别变成0(黑色),lower upper之间的值变成255(白色)

lower_blue=np.array([110,100,100])
upper_blue=np.array([130,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)

mask_tmp = cv2.inRange(hsv, lower_blue, upper_blue)

白色就是背景的像素位置了

取色参考:opencv 颜色空间转换 以及cv2.cvtColor(),cv2.inRange()

五、更改背景

遍历图片像素点,给背景的色重新赋值

# 遍历每个像素点,进行颜色的替换
for i in range(rows):
  for j in range(cols):
    if mask[i,j]==255: # 像素点: 255 = 白色
      #img2[i,j]=(0,0,255) # 白色 -> 红色
      #img2[i,j]=(0,255,0) # 白色 -> 绿色
      #img2[i,j]=(255,0,0) # 白色 -> 蓝色
      #img2[i,j]=(255,0,255) # 白色 -> 品红色
      #img2[i,j]=(0,255,255) # 白色 -> 黄色
      img2[i,j]=(255,255,0) # 白色 -> 青色

cv2.imshow('img', img2)
cv2.waitKey(0)
上一篇 下一篇

猜你喜欢

热点阅读