首页 > 解决方案 > 如何从OpenCV python中的图片中删除背景

问题描述

因为我是计算机视觉的新手。我还想问一下如何删除这张图片的整个背景,只保留药片。我尝试了不同的方法,比如改变背景颜色,但仍然有一些小边缘和噪点。

或者,如果所有白色背景都可能是中性色,圆圈之间没有线条。

在此处输入图像描述

在此处输入图像描述

标签: python-3.ximageopencvcomputer-vision

解决方案


这是 Python/OpenCV 中的一种方法。将图像设置为白色阈值。然后应用一些形态来清理它。然后将其反转以制作蒙版。然后将掩码应用于输入。我注意到你的药片与戒指重叠。所以这个方法不会去掉环。

输入:

在此处输入图像描述

import cv2
import numpy as np

# Read image
img = cv2.imread('pills.jpg')
hh, ww = img.shape[:2]

# threshold on white
# Define lower and uppper limits
lower = np.array([200, 200, 200])
upper = np.array([255, 255, 255])

# Create mask to only select black
thresh = cv2.inRange(img, lower, upper)

# apply morphology
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (20,20))
morph = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

# invert morp image
mask = 255 - morph

# apply mask to image
result = cv2.bitwise_and(img, img, mask=mask)


# save results
cv2.imwrite('pills_thresh.jpg', thresh)
cv2.imwrite('pills_morph.jpg', morph)
cv2.imwrite('pills_mask.jpg', mask)
cv2.imwrite('pills_result.jpg', result)

cv2.imshow('thresh', thresh)
cv2.imshow('morph', morph)
cv2.imshow('mask', mask)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

阈值图像:

在此处输入图像描述

形态清洁图像:

在此处输入图像描述

蒙版图片:

在此处输入图像描述

结果:

在此处输入图像描述


推荐阅读