计算二进制图像中的对象

Counting objects in binary images

我正在处理二进制图像,其中有很多小斑点。我想计算斑点的数量,并发现通常使用轮廓来做到这一点。但是,我获得的信息不允许我测量某些参数,例如这些斑点的面积和周长。有人对如何使用 Python 执行此操作有任何建议吗?

import cv2
from skimage.measure import regionprops

img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)

image, contours, hierarchy = cv2.findContours(img,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)`

获得等高线后,您可以使用 cv2.contourArea() 和 cv2.arclength() 函数分别获得面积和周长。例如,假设您要计算第一个等高线的面积和周长。代码将是这样的:

contour_area = cv2.contourArea(contours[0])
cont_perimeter = cv2.arcLength(contours[0], True)

您还可以使用这些功能对找到的轮廓进行排序。例如,要根据面积对轮廓进行排序,

sorted_contours = sorted(contours, key=cv2.contourArea, reverse=True)

这里,'reverse=True'排序,按照从大到小的降序排列。现在,当您访问 sorted_contours[0] 时,这是您找到的最大轮廓。您还可以使用其他参数对它们进行排序。请参阅 here 以获取有关您可以提取的某些轮廓特征(例如力矩、面积、周长等)的文档。希望这对您有所帮助!