用python实现将 骨架化的图像进行曲线拟合 批量图片输入和批量图片保存
时间: 2024-05-12 11:16:34 浏览: 116
python实现图片批量处理器.
以下是使用Python和OpenCV库实现将骨架化图像进行曲线拟合和批量图片输入和输出的示例代码:
```python
import cv2
import numpy as np
import os
# 定义曲线拟合函数
def fit_curve(points, degree):
# 获得x、y坐标
x = points[:, 0]
y = points[:, 1]
# 多项式拟合
z = np.polyfit(x, y, degree)
f = np.poly1d(z)
# 生成新的坐标点
new_points = np.zeros((len(x), 2))
new_points[:, 0] = x
new_points[:, 1] = f(x)
return new_points
# 定义批量处理函数
def batch_process(input_folder, output_folder, degree):
# 检查输出文件夹是否存在,若不存在则创建
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 遍历输入文件夹中所有图像
for filename in os.listdir(input_folder):
if filename.endswith('.png') or filename.endswith('.jpg'):
# 读取图像
img = cv2.imread(os.path.join(input_folder, filename), cv2.IMREAD_GRAYSCALE)
# 骨架化
skel = cv2.ximgproc.thinning(img)
# 提取骨架像素坐标
points = np.transpose(np.nonzero(skel))
# 曲线拟合
new_points = fit_curve(points, degree)
# 绘制曲线
curve_img = np.zeros_like(img)
for point in new_points:
curve_img[int(point[1]), int(point[0])] = 255
# 保存结果
cv2.imwrite(os.path.join(output_folder, filename), curve_img)
# 测试
batch_process('input_folder', 'output_folder', 3)
```
在上面的代码中,`fit_curve`函数用于进行曲线拟合,`batch_process`用于批量处理图像。其中,`input_folder`和`output_folder`分别为输入和输出文件夹路径,`degree`为多项式拟合的阶数。测试时,只需将`input_folder`和`output_folder`替换为实际的文件夹路径即可。
需要注意的是,本代码仅对二值化的骨架化图像进行曲线拟合,若要对其他类型的图像进行处理,需要先进行二值化和骨架化处理。另外,多项式拟合的阶数越高,曲线拟合的精度越高,但也越容易出现过拟合的情况。因此,需要根据实际情况选择合适的阶数。
阅读全文