以下是翻译的结果:
下面是在Python/OpenCV中实现这一目标的方法。
- 读取输入图像
- 将图像转换为HSV颜色空间
- 根据所需的颜色进行阈值处理,生成掩膜(mask)
- 使用掩膜(mask)更改图像中所有相应像素的颜色
- 绘制新的矩形掩膜,用于指定不希望更改颜色的区域
- 反转新的掩膜,用于指定要更改颜色的区域
- 将新的掩膜应用到原始图像上
- 将反转后的新掩膜应用到更改颜色的图像上
- 将两个结果相加得到最终图像
- 保存结果
输入图像:
![enter image description here](https://istack.dev59.com/D3Afj.webp)
import cv2
import numpy as np
image = cv2.imread('4animals.jpg')
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
sensitivity = 19
lower_white = np.array([0, 0, 255 - sensitivity])
upper_white = np.array([255, sensitivity, 255])
mask = cv2.inRange(hsv, lower_white, upper_white)
image2 = image.copy()
image2[mask > 0] = (170, 170, 170)
x,y,w,h = 33,100,430,550
mask2 = np.zeros_like(image)
cv2.rectangle(mask2, (x,y), (x+w,y+h), (255, 255, 255), -1)
mask2_inv = 255 - mask2
image_masked = cv2.bitwise_and(image, mask2)
image2_masked = cv2.bitwise_and(image2, mask2_inv)
result = cv2.add(image_masked, image2_masked)
cv2.imwrite('4animals_mask.jpg', mask)
cv2.imwrite('4animals_modified.png', image2)
cv2.imwrite('4animals_mask2.jpg', mask2)
cv2.imwrite('4animals_mask2_inv.jpg', mask2_inv)
cv2.imwrite('4animals_masked.jpg', image_masked)
cv2.imwrite('4animals_modified_masked.jpg', image2_masked)
cv2.imwrite('4animals_result.jpg', result)
cv2.imshow('mask', mask)
cv2.imshow('image2', image2)
cv2.imshow('mask2', mask2 )
cv2.imshow('mask2_inv', mask2_inv)
cv2.imshow('image_masked', image_masked)
cv2.imshow('image2_masked', image2_masked)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
颜色遮罩:
![enter image description here](https://istack.dev59.com/rlffE.webp)
矩形遮罩:
![enter image description here](https://istack.dev59.com/iGhsc.webp)
反转的矩形遮罩:
![enter image description here](https://istack.dev59.com/cWsiO.webp)
颜色更改后的图像:
![enter image description here](https://istack.dev59.com/9OlgB.webp)
遮罩输入:
![enter image description here](https://istack.dev59.com/qUyBH.webp)
带有遮罩的颜色更改图像:
![enter image description here](https://istack.dev59.com/Udx7c.webp)
结果:
![enter image description here](https://istack.dev59.com/197XH.webp)