为了账号安全,请及时绑定邮箱和手机立即绑定

优化 OpenCV 掩码边缘

优化 OpenCV 掩码边缘

FFIVE 2021-10-26 10:42:38
我正在扫描旧照片,我想自动化从扫描仪的(嘈杂的)纯白色背景中提取照片的过程,以便我有一张透明的照片。程序的这一部分现在可以工作了,但我还有一个小问题。现在可以准确地检测(和提取)照片,但它会在整个照片周围的背景中留下小而清晰的黑色边框。我试图对透明蒙版应用高斯模糊,但这不会使黑色平滑(并且它使照片的边框看起来“模糊”)。这是我必须提取照片并生成透明蒙版的代码:# Load the scan, and convert it to RGBA.original = cv2.imread('input.jpg')original = cv2.cvtColor(original, cv2.COLOR_BGR2BGRA)# Make the scan grayscale, and apply a blur.image = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY)image = cv2.GaussianBlur(image, (25, 25), 0)# Binarize the scan.retval, threshold = cv2.threshold(image, 50, 255, cv2.THRESH_BINARY)# Find the contour of the object.contours, hierarchy = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)largestContourArea = -1largestContour = -1for contour in contours:    area = cv2.contourArea(contour)    if area > largestContourArea:        largestContourArea = area        largestContour = contour# Generate the transparency mask.mask = numpy.zeros(original.shape, numpy.uint8)cv2.drawContours(mask, [ largestContour ], -1, (255, 255, 255, 255), -1)# Apply the transparency mask.original = cv2.multiply(mask.astype(float) / 255.0, original.astype(float))cv2.imwrite('output.png', original)我有一个样本扫描和使用样本扫描的上述代码的结果。如您所见,照片周围有一个轻微的黑色边框,我想将其删除。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信