如何使用opencv和python删除图像边缘?

如何使用opencv和python删除图像边缘?,python,opencv,Python,Opencv,有什么技术可以使用python+OpenCV去除图像的边缘 例如,对于此输入: 我希望获得以下输出: 在Python/OpenCV中,有一种方法可以实现这一点 读取输入 用黑色填充背景 将非黑色区域设置为白色并另存为遮罩 将遮罩腐蚀到输入的黑暗外部区域内 使用遮罩使遮罩为黑色的图像变为白色 保存结果 输入: 泛洪图像: 腐蚀后的掩模图像: 结果: import cv2 import numpy as np # read image img = cv2.imread('food

有什么技术可以使用python+OpenCV去除图像的边缘

例如,对于此输入:

我希望获得以下输出:


在Python/OpenCV中,有一种方法可以实现这一点

  • 读取输入
  • 用黑色填充背景
  • 将非黑色区域设置为白色并另存为遮罩
  • 将遮罩腐蚀到输入的黑暗外部区域内
  • 使用遮罩使遮罩为黑色的图像变为白色
  • 保存结果

输入:


泛洪图像:

腐蚀后的掩模图像:

结果:

import cv2
import numpy as np

# read image
img = cv2.imread('food.jpg')
h, w = img.shape[:2]

# create zeros mask 2 pixels larger in each dimension
mask = np.zeros([h + 2, w + 2], np.uint8)

# floodfill background with black
floodfill = cv2.floodFill(img, mask, (0,0), (0,0,0), (30), (0), flags=8)[1]

# make all other colors but black into white
mask = floodfill.copy()
mask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
mask[mask!=0] = 255

# erode mask
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (40,40))
mask = cv2.morphologyEx(mask, cv2.MORPH_ERODE, kernel)

# use mask to change background to white
result = img.copy()
result[mask==0] = 255

# save cropped image
cv2.imwrite('food_floodfilled.jpg',floodfill)
cv2.imwrite('food_mask.jpg',mask)
cv2.imwrite('food_processed.jpg',result)

# show the images
#cv2.imshow("thresh", thresh)
cv2.imshow("floodfill", floodfill)
cv2.imshow("mask", mask)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()