У меня есть оригинальное изображение:
тогда я применил следующий код к
- Преобразование исходного изображения в изображение HSV
Затем, используя cv2.findContours()
, я составил список, содержащий все контуры.
Тогда я удалил все контуры области меньше 30.
- Тогда я получил следующее изображение:
То, что я хочу, это удалить границу полученного изображения, которое бесполезно (внешняя граница листа). Мне нужны только внутренние участки листа.
Это код, который я использовал.
import cv2
import numpy as np
img = cv2.imread('Apple___Blackrot30.JPG')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_gr = np.array([25,0,0])
upper_gr = np.array([90,255,255])
mask = cv2.inRange(hsv,lower_gr,upper_gr)
mask=~mask
res = cv2.bitwise_and(img,img,mask = mask)
blur = cv2.bilateralFilter(res,9,75,75)
im2,cont,_ = cv2.findContours(mask,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
areas = [cv2.contourArea(each_conts) for each_conts in cont]
cont_counter = 0
for each_conts in areas:
if each_conts < 30:
cv2.fillPoly(im2, pts =[cont[cont_counter]], color=(0,0,0))
if each_conts > 1024:
cv2.drawContours(mask, cont[cont_counter], 0, (255,255,255), -1)
cont_counter+=1
cv2.imshow('cn',im2)