【发布时间】:2020-04-06 00:09:00
【问题描述】:
我尝试使用以下代码获取蒙版图像的边缘:
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('ISIC_0000000_segmentation.png',0)
edges = cv2.Canny(img,0,255)
plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(edges, cmap='gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])
plt.show
我得到的是这样的:
我的计划是使用边缘图像裁剪以下图片:
有谁知道如何使边缘图像更好,以及如何使用它来裁剪正常图像?
编辑:@Mark Setchell 提出了一个很好的观点:如果我可以直接使用蒙版图像来裁剪图像,那就太好了。
另外:可以将正常图像精确地放置在蒙版图像上,以便蒙版上的黑色区域覆盖正常图片上的蓝色区域。
编辑:@Mark Setchell 引入了将法线图像与蒙版图像相乘的想法,因此背景将导致 0(黑色),其余部分将保持其颜色。当我的蒙版图片是.png,而我的正常图片是.jpg时,会不会有问题?
编辑: 我编写了以下代码来尝试将两张图片相乘:
# Importing Image and ImageChops module from PIL package
from PIL import Image, ImageChops
# creating a image1 object
im1 = Image.open("ISIC_0000000.jpg")
# creating a image2 object
im2 = Image.open("ISIC_0000000_segmentation.png")
# applying multiply method
im3 = ImageChops.multiply(im1, im2)
im3.show()
但我得到了错误:
ValueError: images do not match
有谁知道我该如何解决这个问题?
【问题讨论】:
-
我完全不明白你为什么想要边缘图像。为什么不用遮罩遮住图像?
-
我最初的想法是勾勒出边框,这样我仍然可以使用背景,但我真的不再需要背景了,所以如果可以直接使用蒙版图像会很棒的。问题是我不知道怎么做。
-
你的面具是黑色的,它是零。因此,如果您将图像乘以蒙版,它将变为零(黑色)。考虑一下白色部分。
-
白色会给出“1”,它可以与每种颜色相乘,而黑色“0”会主导每种颜色,因为一切都乘以 0,结果为 0。这就是你要告诉我的,因为这个会解决我的问题!
-
这就是我要去的地方。你的面具可能有 white=1 或 white=255,但是是的。
标签: python image opencv image-processing computer-vision