使用python 将我输入的骨架图片里的骨架进行曲线拟合 批量图片输入和批量图片输出
时间: 2024-06-11 12:03:58 浏览: 137
为了实现骨架曲线拟合,我们可以使用Python中的OpenCV库,它提供了一些强大的函数来处理图像。以下是一个示例代码,可以将输入的骨架图片进行曲线拟合,并将结果保存到输出文件夹中。
```python
import cv2
import numpy as np
import os
# 定义输入和输出文件夹
input_folder = "input_folder"
output_folder = "output_folder"
# 定义曲线拟合函数
def curve_fitting(points):
# 将点进行排序并转换为numpy数组
points = np.array(sorted(points, key=lambda x: x[0]))
# 使用多项式拟合函数,这里选择3次函数
curve = np.polyfit(points[:, 0], points[:, 1], 3)
# 生成曲线上的点
x = np.linspace(points[0, 0], points[-1, 0], 100)
y = np.polyval(curve, x)
# 将点转换为整数
points = np.column_stack((x, y)).astype(np.int32)
return points
# 遍历输入文件夹中的所有文件
for filename in os.listdir(input_folder):
# 读取图像并进行二值化处理
img = cv2.imread(os.path.join(input_folder, filename))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 120, 255, cv2.THRESH_BINARY_INV)[1]
# 获取轮廓并将其绘制到新的图像中
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
curve_img = np.zeros_like(img)
for contour in contours:
# 对每个轮廓进行曲线拟合
curve_points = curve_fitting(contour.squeeze())
# 绘制曲线
cv2.polylines(curve_img, [curve_points], False, (0, 255, 0), thickness=2)
# 保存输出图像
cv2.imwrite(os.path.join(output_folder, filename), curve_img)
```
这个示例代码使用了一个名为`curve_fitting`的函数来进行曲线拟合。该函数接受一个二维数组,表示轮廓中的所有点。它首先将这些点按照x坐标进行排序,然后使用`np.polyfit`函数来进行多项式拟合。最后,它生成一个由100个点组成的曲线,并将其转换为整数类型。在主循环中,我们使用`cv2.findContours`函数来获取轮廓,然后对每个轮廓使用`curve_fitting`函数进行拟合,最后将结果保存到输出文件夹中。
阅读全文