python-3.x - 如何从OpenCV python中的图片中删除背景
问题描述
因为我是计算机视觉的新手。我还想问一下如何删除这张图片的整个背景,只保留药片。我尝试了不同的方法,比如改变背景颜色,但仍然有一些小边缘和噪点。
或者,如果所有白色背景都可能是中性色,圆圈之间没有线条。
解决方案
这是 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()
阈值图像:
形态清洁图像:
蒙版图片:
结果:
推荐阅读
- python-3.x - Python |S1 向量到字符串
- python - 使用 2D numpy 数组的每一行创建 1D numpy 数组的元组列表
- java - 如何使用 log4j2.properties 文件将不同级别的日志发送到不同的附加程序?
- python - 循环列表列表,但 if 语句似乎无法正常工作
- javascript - 推入数组并循环,直到数组长度达到3
- r - 根据其他列的条件选择列中的最大值
- angular - 在参数中访问自定义 RxJS 运算符中的流变量
- c# - 使用 Web SDK 构建交互式控制台应用程序
- python - 在 CPython 中,哪个结构用于实现用户定义的类及其实例
- c# - 如何在 MySql 和 C# 中存储存储过程选择查询的返回值