#python #opencv #computer-vision
#python #opencv #компьютерное зрение
Вопрос:
Здесь у меня есть это изображение с множеством маленьких точек принтера голубого, пурпурного и желтого цветов.
После разделения цветового канала (CMYK) Я применил пороговое значение к изображению.
Здесь для цветового канала голубой.
Теперь я хочу найти способ вычислить периметр для каждой из этих точек. Итак, в конце я хочу иметь среднее и стандартное отклонение для периметра.
Я уже нашел способ (с помощью кого-то здесь, в stackoverflow) вычислить среднее значение и std dev для размеров точек с помощью:
def compute_mean_stddev(contours_of_images):
for contours_of_image in contours_of_images:
count = len(contours_of_image)
sum_list = []
for cntr in contours_of_image:
area = cv2.contourArea(cntr)
sum_list.append(area)
average = np.mean(sum_list)
standard_deviation = np.std(sum_list)
Вместо этого теперь для области, есть ли способ получить периметр?
Комментарии:
1. Для чего вам нужны площадь и периметр? будете ли вы обучать нейронную сеть? или другой классификатор?
Ответ №1:
Хороший случай, согласно документации OpenCV, когда у вас будут контуры, вы сможете вычислить то, что хотите, используя cv.arcLength()
метод.
Это также называется длиной дуги. Это можно выяснить с помощью функции cv.arcLength(). Второй аргумент указывает, является ли форма замкнутым контуром (если передано значение True) или просто кривой.
Пример из официальных документов:
import numpy as np
import cv2 as cv
img = cv.imread('star.jpg',0)
ret, thresh = cv.threshold(img,127,255,0)
contours, hierarchy = cv.findContours(thresh, 1, 2)
cnt = contours[0]
area = cv.contourArea() # Area of first contour
perimeter = cv.arcLength(cnt, True) # Perimeter of first contour
Итак, в вашем случае вы должны обновить свой код следующим образом:
def compute_mean_stddev(contours_of_images):
for contours_of_image in contours_of_images:
count = len(contours_of_image)
sum_list = []
for cntr in contours_of_image:
area = cv2.contourArea(cntr)
perimeter = cv.arcLength(cntr, True)
average = np.mean(sum_list)
standard_deviation = np.std(sum_list)
Надеюсь, это сработает!