在OpenCV中,你可以使用不同的方法来替换图像中的颜色。最常见的方法之一是使用掩码(膜)(mask)来选择特定的颜色范围,然后将这个范围内的像素替换为新的颜色。
在OpenCV中,你可以使用不同的方法来替换图像中的颜色。最常见的方法之一是使用掩码(mask)来选择特定的颜色范围,然后将这个范围内的像素替换为新的颜色。下面是如何实现颜色替换的基本步骤:
代码实现:
import cv2
import numpy as np
# 读取图像
image = cv2.imread('./images/jpg/color_block.jpg')
# 转换为HSV颜色空间
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 定义你想要替换的颜色范围(例如,红色)
# 例如,对于红色,可以设置HSV范围为:low_red = [0, 100, 100], high_red = [10, 255, 255]
low_red = np.array([0, 100, 100])
high_red = np.array([10, 255, 255])
# 创建掩码
mask = cv2.inRange(hsv, low_red, high_red)
# 使用掩码反转图像,以便只替换选定颜色
mask_inv = cv2.bitwise_not(mask)
# 创建一个与原图同样大小的黑色图像
new_color = np.zeros_like(image)
# 将你想要替换成的颜色设置到new_color中,例如蓝色
new_color[:, :, :] = [255, 0, 0] # BGR格式的红色
# 将new_color应用到原图上,仅在掩码区域生效
res = cv2.bitwise_and(image, image, mask=mask_inv)
new_color_on_mask = cv2.bitwise_and(new_color, new_color, mask=mask)
# 将两部分合并,得到最终结果
final_image = cv2.add(res, new_color_on_mask)
# 显示结果
cv2.imshow('Original Color Image', image)
cv2.imshow('Replaced Color Image', final_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行效果:

OpenCV实现更换证件照背景色的例子。
import cv2
import numpy as np
# 读取图片
img = cv2.imread('./images/png/personal03.png')
resize_img_bak = cv2.resize(img, None, fx=0.6, fy=0.6)
resize_img = cv2.resize(img, None, fx=0.6, fy=0.6)
rows, cols, channels = resize_img.shape
# 转换为hsv模型
hsv = cv2.cvtColor(resize_img, cv2.COLOR_BGR2HSV)
# 二值化处理,蓝色背景
lower_blue = np.array([90, 70, 70])
upper_blue = np.array([110, 255, 255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# 腐蚀操作
erode = cv2.erode(mask, None, iterations=1)
# 中值滤波
erode = cv2.medianBlur(erode, 9)
if __name__ == '__main__':
# 遍历像素点
for i in range(rows):
for j in range(cols):
if erode[i, j] == 255:
#要更换的背景颜色
resize_img[i, j] = (0, 0, 200)
cv2.imshow("Result", resize_img)
cv2.imshow("Original", resize_img_bak)
# 保存处理结果
cv2.imwrite("Result.jpg", resize_img)
cv2.waitKey(0)
