如何使用 OpenCV 根据 object 半径裁剪图像?

How to crop image based on the object radius using OpenCV?

我是 python 的新手。我了解 image-preprocessing 的基础知识。我不知道如何使用 OpenCV 删除背景和裁剪图像。

这是 Python/OpenCV 中的一种方法。

  • 读取输入
  • 转换为灰度
  • 阈值并反转为掩码
  • 将蒙版放入输入的 alpha 通道
  • 保存结果

输入:

import cv2
import numpy as np

# load image
img = cv2.imread('black_circle.png')

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

# threshold
threshold = cv2.threshold(gray,128,255,cv2.THRESH_BINARY)[1]

# invert so circle is white on black
mask = 255 - threshold

# put mask into alpha channel of image
result = np.dstack((img, mask))

# save resulting masked image
cv2.imwrite('black_circle_masked.png', result)

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

结果:

注:下载结果看透明度

这是 Python/OpenCV 中对您的新图像的处理。

输入:

import cv2
import numpy as np

# load image as grayscale
img = cv2.imread('Diabetic-Retinopathy_G_RM_151064169.jpg')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# threshold input image
mask = cv2.threshold(gray, 10, 255, cv2.THRESH_BINARY)[1]

# optional morphology to clean up small spots
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)

# put mask into alpha channel of image
result = np.dstack((img, mask))

# save resulting masked image
cv2.imwrite('Diabetic-Retinopathy_G_RM_151064169_masked.png', result)

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

Result