np.squeeze(contour)返回的是mask轮廓的坐标点还是mask所有的坐标点
时间: 2024-04-09 17:27:46 浏览: 183
numpy.array 操作使用简单总结
`np.squeeze(contour)` 返回的是 mask 轮廓的坐标点,而不是 mask 所有的坐标点。
在 OpenCV 中,`findContours` 函数会返回一个包含所有轮廓的列表。每个轮廓本身是一个包含所有坐标点的 Numpy 数组。但是,这个数组可能具有冗余的维度,可以使用 `np.squeeze` 函数将其压缩为二维数组。
例如,如果轮廓数组的形状为 `(1, n, 2)` 或 `(n, 1, 2)`,其中 `n` 是坐标点的数量,那么使用 `np.squeeze(contour)` 将返回一个形状为 `(n, 2)` 的二维数组,其中每一行表示一个坐标点。
请注意,如果轮廓数组的形状本身已经是 `(n, 2)`,那么 `np.squeeze` 函数不会对其进行任何处理,直接返回原始数组。
如果您需要获取 mask 所有的坐标点,而不仅仅是轮廓上的点,可以使用 `cv2.findNonZero` 函数。该函数会返回 mask 中非零像素的坐标点数组。
以下是示例代码:
```python
import cv2
import numpy as np
def get_all_mask_points(mask):
# 获取所有非零像素的坐标点
points = cv2.findNonZero(mask)
# 将坐标点数组转换为二维数组
points = np.squeeze(points)
return points
```
使用示例:
```python
# 读取图像并转换为灰度图像
image = cv2.imread('image.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化处理
_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)
# 获取所有非零像素的坐标点
points = get_all_mask_points(thresh)
# 打印坐标点
for point in points:
print(point)
```
请确保已经安装了 OpenCV 库,并将图像文件的路径替换为实际的图像文件路径。这个函数将返回一个包含 mask 所有非零像素的坐标点的二维数组。
阅读全文