使用Opencv python从图像中删除遮罩圆

2024-06-27 09:27:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用BitWish\u移除图像中心,但效果不好。请参见下文。

worning mask

如你所见,它并没有去除所有的颜色

在我的代码下面

image = cv2.imread("icons/agta.jpg")
height,width,depth = image.shape
circle = np.zeros((height,width), np.uint8)
cv2.circle(circle,(int(width/2),int(height/2)),90,1,thickness=-1)

masked = cv2.bitwise_not(image, image, mask=circle)

cv2.imshow("masked", masked)
cv2.imwrite("hue.jpg",masked)
cv2.waitKey(0) 

Tags: 图像image颜色np中心widthcv2int
1条回答
网友
1楼 · 发布于 2024-06-27 09:27:35

如果我理解这个问题,这里有一种在Python/OpenCV中实现的方法

  • 读取输入
  • 变灰
  • 门槛
  • 应用形态学将其作为面膜进行清洁
  • 反转掩模并制作3个通道
  • 将遮罩应用于输入,使圆圈变黑
  • 保存结果

输入:

enter image description here

import cv2
import numpy as np

# load image
img = cv2.imread('white_circle.jpg')

# convert to gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# threshold input image
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]

# apply morphology open and close and dilate
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (11,11))
mask = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (55,55))
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
mask = cv2.morphologyEx(mask, cv2.MORPH_DILATE, kernel)

# invert mask
mask = 255 -mask

# make mask 3 channel
mask = cv2.merge([mask,mask,mask])

# apply mask to image to blacken circle area
result = img.copy()
result = cv2.bitwise_and(img, mask)

# save resulting masked image
cv2.imwrite('white_circle_thresh.jpg', thresh)
cv2.imwrite('white_circle_mask.jpg', mask)
cv2.imwrite('white_circle_masked.jpg', result)

# display result, though it won't show transparency
cv2.imshow("thresh", thresh)
cv2.imshow("mask", mask)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()


阈值图像:

enter image description here

遮罩图像:

enter image description here

输入中的黑色圆圈:

enter image description here

相关问题 更多 >