在python中,怎样把二值图的轮廓点每一百个取一个样点,把样点坐标存在数组中呢...
时间: 2024-05-02 13:23:10 浏览: 52
你可以使用 `cv2.findContours()` 函数来获取二值图的轮廓,然后使用简单的循环和条件语句来筛选出每个轮廓中的每一百个点,最后存储到数组中。下面是一个示例代码:
```python
import cv2
import numpy as np
img = cv2.imread('binary_image.png', 0)
contours, hierarchy = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contour_points = []
for contour in contours:
for i, point in enumerate(contour):
if i % 100 == 0:
x, y = point[0]
contour_points.append((x, y))
```
在这个示例中,我们使用 `cv2.imread()` 函数读入二值图像,并使用 `cv2.findContours()` 函数获取轮廓和层级信息。然后,我们循环遍历每个轮廓中的每个点,检查其索引是否是 100 的整数倍。如果是,我们将该点的坐标添加到 `contour_points` 数组中。
请注意,我们假设每个轮廓都是封闭的,因此最后的样点数组中将包含轮廓的起点和终点。如果你想要去掉这些点,只需添加一个简单的条件判断即可。
相关问题
在python中,怎样把二值图的轮廓点每一百个取一个样点,把样点坐标存在数组中呢
可以使用OpenCV中的findContours函数来检测轮廓,然后使用Python的列表推导式,可以使用range函数或者numpy的arange函数,来每隔100个取一个样点,最后把样点的坐标存入数组中即可。
请写出python opencv 为二值化图片轮廓点每一百个取一个样点,并获取样点坐标的具体代码
import cv2
import numpy as np# 读取图片
img = cv2.imread("image.jpg")# 将图片转化为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 进行二值化处理
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)# 提取轮廓
contours, hierarchy = cv2.findContours(binary,
cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_NONE)# 取出轮廓点,每一百个取一个样点,并获取样点坐标
step = int(len(contours[0])/100)
sample_points = []
for i in range(100):
sample_points.append(contours[0][i*step])# 转化为numpy数组
sample_points = np.array(sample_points)# 获取样点坐标
x_coords = list(sample_points[:,:,0].flatten())
y_coords = list(sample_points[:,:,1].flatten())
阅读全文