gpt4 book ai didi

python - 如何使用同一图片的二进制蒙版图像裁剪图像以去除python中的背景?

转载 作者:行者123 更新时间:2023-12-04 21:01:36 25 4
gpt4 key购买 nike

我尝试使用以下代码获取蒙版图像的边缘:

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

我得到的是这样的:

enter image description here
但由于某种原因,边缘并不光滑。

我的计划是使用边缘图像裁剪以下图片:



有谁知道如何使边缘图像更好,以及如何使用它来裁剪正常图像?

编辑:@Mark Setchell 提出了一个很好的观点:如果我可以直接使用蒙版图像来裁剪图像,那就太好了。

另外:也许可以将正常图像精确地放置在蒙版图像上,以便蒙版上的黑色区域覆盖普通图片上的蓝色区域。

编辑:@Mark Setchell 引入了将 normale 图像与蒙版图像相乘的想法,因此背景将导致 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
有谁知道我该如何解决这个问题?

最佳答案

如果我理解正确,您想提取对象并删除背景。要做到这一点,你可以做一个简单的 cv2.bitwise_and() 使用掩码和原始输入图像。

Does anyone know how I could make the edge image better and how I could use this to crop the normal image?



要从图像中提取背景,您不需要边缘图像,阈值图像可用于仅删除图像所需的部分。您可以使用 mask 图像直接删除图像并去除背景。获得二元掩码的其他方法包括使用固定阈值、自适应阈值或 Canny 边缘检测。这是一个简单的例子,它使用 Otsu 的阈值来获取二进制掩码,然后进行位与运算。

这是删除背景的结果



如果您希望删除的背景为白色,您还可以将蒙版上的所有像素变为白色



注:根据您想要结果的“平滑”程度,您可以应用任何 blur对图像进行阈值处理以平滑边缘。这可以包括平均、高斯、中值或双边滤波。

代码
import cv2

# Load image, grayscale, Otsu's threshold
image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Remove background using bitwise-and operation
result = cv2.bitwise_and(image, image, mask=thresh)
result[thresh==0] = [255,255,255] # Turn background white

cv2.imshow('thresh', thresh)
cv2.imshow('result', result)
cv2.waitKey()

关于python - 如何使用同一图片的二进制蒙版图像裁剪图像以去除python中的背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59307320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com