Вот такой лист
Я хочу найти длину его периферии, то есть его периметра, используя openCV и Python. Я пытался написать код, но он не дает желаемого результата. Мне нужно сбросить порог для каждого примера, а также он не дает закрытый контур. Я хочу, чтобы это был обобщенный код, работающий на всех таких листьях. Пожалуйста, помогите мне здесь:
import cv2
#reading the image
col = cv2.imread("leaf2.jpg")
width,height,channels = col.shape
col=cv2.resize(col,(width,height),interpolation=cv2.INTER_CUBIC)
image=cv2.pyrMeanShiftFiltering(col,10,100,3)
edged = cv2.Canny(image, 0,10)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
closed = cv2.morphologyEx(edged, cv2.MORPH_CLOSE, kernel)
#finding_contours
image, contours, hierarchy = cv2.findContours(closed, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
perimeter=0
for c in contours:
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.02 * peri, True)
cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)
perimeter = perimeter+cv2.arcLength(c,True)
print(perimeter)
cv2.imshow("Output", image)
cv2.waitKey(0)