Анализ изображений
Я пишу программу, которая считает и выводит количество "пятен" на изображениях на экран.Проблема заключается в том, что cv2 находит много лишних контуров "пятен" на изображении. Небольшие лишние контуры удаляются с помощью моей ф-ии del_small_cont, однако остаются и большие лишние контуры. Как избавится от всех из этих лишних контуров? Также не все контура являются замкнутыми и некоторые из них не соответствуют форме реальных "пятен".
from cv2 import cv2
import matplotlib.pyplot as plt
def del_small_cont(cnt):
lst = []
for i in range(len(cnt)):
if(len(cnt[i])>50 and len(cnt[i])<1000):
lst.append(cnt[i])
return lst
image = cv2.imread('2021-02-12_16-07-45.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 160, 255, 0)
blur = cv2.GaussianBlur(thresh, (11, 11), 0)
plt.imshow(blur, cmap='gray')
cv2.imwrite('2021-02-12_16-07-45(0).png', blur)
plt.show()
canny = cv2.Canny(blur, 9, 50, 50)
plt.imshow(canny, cmap='gray')
cv2.imwrite('2021-02-12_16-07-45(1).png', canny)
plt.show()
dilated = cv2.dilate(canny, (1, 5), iterations=1)
plt.imshow(dilated, cmap='gray')
cv2.imwrite('2021-02-12_16-07-45(3).png', dilated)
plt.show()
(cnt, hierarchy) = cv2.findContours(dilated.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cnt1 = del_small_cont(list(cnt))
cv2.drawContours(rgb, cnt1, -1, (255, 0, 0), 2)
plt.imshow(rgb)
cv2.imwrite('2021-02-12_16-07-45(4).png', rgb)
plt.show()
cv2.drawContours(rgb, cnt, -1, (255, 0, 0), 2)
plt.imshow(rgb)
cv2.imwrite('2021-02-12_16-07-45(5).png', rgb)
plt.show()
print("No of circles: ", len(cnt1))
