将地图和图像相乘 OpenCV2
Multiply Maps and Images Together OpenCV2
我目前有一个图像的显着图,使用下面的代码:
img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
saliency = cv2.saliency.StaticSaliencyFineGrained_create()
(success, saliencyMap) = saliency.computeSaliency(image)
# cv2.imshow("Image", image)
cv2.imshow("output", saliencyMap)
输出是下面的显着图。它是标准化的(我相信)并且数组只包含 0 到 1 之间的值。
我想知道是否有办法将这个显着性掩码放在下面的图像上以获得突出显着区域的输出图像?
我试过将图像分成 3 个通道,然后将每个通道乘以地图,然后将它们重新堆叠在一起,但这并没有显示效果。我试过的代码是:
(B, G, R) = cv2.split(resized)
y = saliencyMap
# cv2.imshow("Blue", B)
# cv2.imshow("Green", G)
# cv2.imshow("Red", R)
# cv2.waitKey(0)
B = B * y.astype(y.dtype)
G = G * y.astype(y.dtype)
R = R * y.astype(y.dtype)
img = cv2.merge((B,G,R))
cv2.imshow("Image", img)
cv2.waitKey(0)
然而,我得到的输出图像是:
这显然是错误的。有什么提示或建议吗?
您是对的,只是您需要将 R,G,B
转换为 uint8
dtype。截至目前,它们是 float
类型(因为 saliency
也是浮点数),而浮点数 >1
将为白色。
此外,您可以使用广播:
output = (img * saliency[...,None]).astype('uint8')
并输出:
我目前有一个图像的显着图,使用下面的代码:
img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
saliency = cv2.saliency.StaticSaliencyFineGrained_create()
(success, saliencyMap) = saliency.computeSaliency(image)
# cv2.imshow("Image", image)
cv2.imshow("output", saliencyMap)
输出是下面的显着图。它是标准化的(我相信)并且数组只包含 0 到 1 之间的值。
我想知道是否有办法将这个显着性掩码放在下面的图像上以获得突出显着区域的输出图像?
我试过将图像分成 3 个通道,然后将每个通道乘以地图,然后将它们重新堆叠在一起,但这并没有显示效果。我试过的代码是:
(B, G, R) = cv2.split(resized)
y = saliencyMap
# cv2.imshow("Blue", B)
# cv2.imshow("Green", G)
# cv2.imshow("Red", R)
# cv2.waitKey(0)
B = B * y.astype(y.dtype)
G = G * y.astype(y.dtype)
R = R * y.astype(y.dtype)
img = cv2.merge((B,G,R))
cv2.imshow("Image", img)
cv2.waitKey(0)
然而,我得到的输出图像是:
这显然是错误的。有什么提示或建议吗?
您是对的,只是您需要将 R,G,B
转换为 uint8
dtype。截至目前,它们是 float
类型(因为 saliency
也是浮点数),而浮点数 >1
将为白色。
此外,您可以使用广播:
output = (img * saliency[...,None]).astype('uint8')
并输出: