假设我有一个已经二值化的numpy数组图像:所有值都是0或255。在Python版的OpenCV中,我可以执行以下操作:
conn = cv2.connectedComponentsWithStats(mask, 8, cv2.CV_32S)
conn
对象将提供以下信息:
- 有多少个联通组件(标签)。
- 原始图像中每个像素的标签。
- 每个联通组件的边界框和面积。
- 每个联通组件的质心位置。
此外,保证标签 0 是“背景”标签,但根据 文档 ,没有说明如何确定背景。
假设我的图像是白色背景上的黑点,其行为实际上没有任何保证:可能是一个黑点实际上溢出了背景(留下了“背景角落”),也可能是多个小块点,甚至是排列成黑点之间形成白色岛屿等。
但我只对我的黑点感兴趣。
当我对 openCV 提供的背景组件的颜色没有信心时,有没有一种简单的 Pythonic 方法 来确定每个连通段的底层颜色? 或者说:我是否忽略了关于 connectedComponent 功能或 OpenCV API 的明显内容?
(注意:我知道可以 brute force 这个问题:循环遍历标签,在提供的标签数组中查找每个标签的第一个实例,然后探测图像数组中相应的索引。至少我认为我可以这样做--文档很简单。但我认为这种方法非常不简洁。)