【发布时间】:2021-09-17 08:52:52
【问题描述】:
【问题讨论】:
-
使用
connectedComponentsWithStats而不是下面的答案。它会给你the area in pixels,一般来说你应该通过官方文档中的教程来工作。这就是您了解您使用的工具的方式。
标签: python opencv image-processing
【问题讨论】:
connectedComponentsWithStats 而不是下面的答案。它会给你the area in pixels,一般来说你应该通过官方文档中的教程来工作。这就是您了解您使用的工具的方式。
标签: python opencv image-processing
您还可以使用 cv2.findContours() 来获取每个白色斑点的轮廓。轮廓带有许多额外的属性,您可以在这里找到:
https://docs.opencv.org/master/d1/d32/tutorial_py_contour_properties.html
这包括获取他们的内部区域。
import cv2
import numpy as np
# load image
img = cv2.imread("outline.png");
# set as binary mask
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY);
mask = cv2.inRange(gray, 155, 255);
# contours # if you're using OpenCV 3* then it returns as _, contours, _
contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE);
# find the biggest contour
biggest = None;
biggest_area = -1;
for con in contours:
area = cv2.contourArea(con);
if biggest_area < area:
biggest_area = area;
biggest = con;
# draw the new contour
redraw = np.zeros_like(img);
cv2.drawContours(redraw, [biggest], -1, (100, 150, 0), -1);
# show
cv2.imshow("Biggest", redraw);
cv2.waitKey(0);
【讨论】:
您可以为此使用 OpenCV 中的 connectedComponents 函数。
retval, labels=cv.connectedComponents(image[, labels[, connectivity[, ltype]]])
可以在文档中找到有关此功能的更多详细信息。输出图像是一个带标签的图像,其中每个连接的组件都有一个标签。 输出 retval 是标签的总数(也是连接组件的数量)。
那么你所要做的就是遍历连接的组件以找到具有最多像素的组件。
【讨论】: