我這里有這張圖片,上面有很多青色、品紅色和黃色的小列印機點。
分離顏色通道 (CMYK) 后,我在影像上應用了閾值。
這里是顏色通道青色。

現在我想找到一種方法來計算每個點的周長。所以最后我想要一個周長的均值和標準差。
我已經找到了一種方法(在 stackoverflow 上有人的幫助下)來計算點大小的均值和標準差:
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)
而現在對于該區域,有沒有辦法獲得周長?
uj5u.com熱心網友回復:
很好的例子,根據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)
我希望這有效!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/382337.html
