python:更换图片背景色
2020-09-23 本文已影响0人
胡童远
导读
使用python cv2模块识别、更换图片背景。
一、安装、加载依赖
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)
