在python中使用opencv改变图像中某个区域的颜色
问题:在python中使用opencv改变图像中某个区域的颜色 我有一张图片,我想将所有白色像素更改为灰色,但仅限于图像的某个区域。示例图片,我只想更改红色矩形之外的图片,而不更改红色矩形内的图像: 我已经有了通用代码,这是其他人 Stackoverflow 问题的一部分,它改变了每个白色像素的颜色,而不仅仅是一个区域之外的像素。 image = cv.imread("meme 2.jpg") h
·
问题:在python中使用opencv改变图像中某个区域的颜色
我有一张图片,我想将所有白色像素更改为灰色,但仅限于图像的某个区域。示例图片,我只想更改红色矩形之外的图片,而不更改红色矩形内的图像:
我已经有了通用代码,这是其他人 Stackoverflow 问题的一部分,它改变了每个白色像素的颜色,而不仅仅是一个区域之外的像素。
image = cv.imread("meme 2.jpg")
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
# Define lower and uppper limits of what we call "white-ish"
sensitivity = 19
lower_white = np.array([0, 0, 255 - sensitivity])
upper_white = np.array([255, sensitivity, 255])
# Mask image to only select white
mask = cv.inRange(hsv, lower_white, upper_white)
# Change image to grey where we found brown
image[mask > 0] = (170, 170, 170)
cv.imwrite(file, image)
解答
这是在 Python/OpenCV 中执行此操作的一种方法。
-
读取输入
-
转换为 HSV 颜色空间
-
制作蒙版所需颜色的阈值
-
使用蒙版改变图像中所有对应像素的颜色
-
为不想改变的区域绘制一个新的矩形遮罩
-
反转要更改的区域的新蒙版
-
对原图应用新蒙版
-
将倒置的新蒙版应用于变色的图像
-
将两个结果相加,形成最终图像
-
保存结果
输入:
import cv2
import numpy as np
# Read image
image = cv2.imread('4animals.jpg')
# Convert to HSV
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# Define lower and uppper limits of what we call "white-ish"
sensitivity = 19
lower_white = np.array([0, 0, 255 - sensitivity])
upper_white = np.array([255, sensitivity, 255])
# Create mask to only select white
mask = cv2.inRange(hsv, lower_white, upper_white)
# Change image to grey where we found white
image2 = image.copy()
image2[mask > 0] = (170, 170, 170)
# Create new rectangular mask that is white on black background
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)
# invert mask
mask2_inv = 255 - mask2
# apply mask to image
image_masked = cv2.bitwise_and(image, mask2)
# apply inverted mask to image2
image2_masked = cv2.bitwise_and(image2, mask2_inv)
# add together
result = cv2.add(image_masked, image2_masked)
# save results
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()
彩色面膜:
矩形遮罩:
倒置矩形遮罩:
颜色改变的图像:
屏蔽输入:
蒙面颜色更改图像:
结果:
更多推荐
已为社区贡献126483条内容
所有评论(0)