首先,根据轮廓上的关键点获取掩膜mask
# coding=utf-8
import numpy as np
import json
import cv2
image = cv2.imread("/home/dell/1575532290620423707.jpg")#原始图像路径
lists = [[ , ],[ , ],[ , ],[ , ],[ , ]]#填入自己轮廓关键点的像素坐标
b = np.array([lists],dtype = np.int32)
im = np.zeros(image.shape[:2], dtype = "uint8")
cv2.polylines(im, b, 1, 255)
cv2.fillPoly(im, b, 255)
mask = im#生成的掩膜
cv2.imwrite('/home/dell/yan.jpg',mask)#保存掩膜
cv2.imshow("Mask", mask)#可视化掩膜
masked = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("Mask to Image", masked)
cv2.waitKey(0)
其次,根据掩膜获取所有的轮廓点
import cv2
import numpy as np
import time
def get_contour(img):
"""获取连通域
:param img: 输入图片
:return: 最大连通域
"""
# 灰度化, 二值化, 连通域分析
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, img_bin = cv2.threshold(img_gray, 127, 255, c