【发布时间】:2021-03-19 10:43:50
【问题描述】:
我对 cv2 和 python 还是很陌生,所以如果这是基本的还是重复的,请原谅我。我试过搜索但无济于事。我有一张图像,比如penguin,我使用cv2.inRange() 函数掩盖了它。然后我尝试将 Viridis 颜色图应用于图像,但它适用于所有内容,包括蒙版。我希望颜色图仅应用于未屏蔽区域以突出值的细微差异。本质上,我希望将未屏蔽区域中的最小值映射到 Viridis 的紫色,将未屏蔽区域中的最大值映射到 Viridis 的黄色,并将两者之间的值线性映射。
这是我的尝试和resulting image。请注意,先前为黑色的蒙版区域是如何包含在映射中的,现在是紫色的。我什至不确定这是否可能。也许需要自定义颜色图?
import cv2
import numpy as np
img = cv2.imread('penguin.jpg') #Read in image
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) #Change to HSV
# define range of white color in HSV
lower_white = np.array([0,0,210])
upper_white = np.array([255,255,255])
mask = cv2.inRange(img, lower_white, upper_white) # Create the mask
bitwise_mask = cv2.bitwise_and(img,img,mask=mask) # Apply mask
masked_core = cv2.cvtColor(bitwise_mask, cv2.COLOR_HSV2BGR) #Change to BGR
#But how do I get it to apply only to unmasked area?
not_desired = cv2.applyColorMap(masked_core, cv2.COLORMAP_VIRIDIS) #Viridis Colormap
#Display and write image
cv2.imwrite('penguin_masked.jpg', not_desired)
cv2.imshow('penguin', not_desired)
cv2.waitKey()
【问题讨论】:
标签: python numpy opencv image-processing opencv-python