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