用python实现 将输入的骨架化的图像变成光滑的曲线 批量图片输入和批量图片保存
时间: 2024-06-11 22:04:08 浏览: 201
以下是用Python实现将输入的骨架化的图像变成光滑的曲线并批量处理图片输入和输出的示例代码:
```python
import os
import cv2
import numpy as np
def smooth_skeleton(img, sigma=1.0):
# 高斯滤波
img_blur = cv2.GaussianBlur(img, (0, 0), sigma)
# Canny边缘检测
canny = cv2.Canny(img_blur, 10, 50)
# 轮廓检测
contours, hierarchy = cv2.findContours(canny, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 轮廓近似
smooth_contours = []
for cnt in contours:
epsilon = 0.001 * cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, epsilon, True)
smooth_contours.append(approx)
# 画出轮廓
img_smooth = np.zeros_like(img)
cv2.drawContours(img_smooth, smooth_contours, -1, 255, 1)
return img_smooth
if __name__ == '__main__':
input_dir = '/path/to/input/dir'
output_dir = '/path/to/output/dir'
sigma = 1.0 # 高斯滤波参数
for file in os.listdir(input_dir):
if file.endswith('.png') or file.endswith('.jpg'):
img = cv2.imread(os.path.join(input_dir, file), cv2.IMREAD_GRAYSCALE)
img_smooth = smooth_skeleton(img, sigma)
cv2.imwrite(os.path.join(output_dir, file), img_smooth)
```
在上述代码中,我们首先定义了一个函数`smooth_skeleton`,该函数接受一个骨架化的图像和一个高斯滤波的参数,然后使用高斯滤波和Canny边缘检测得到图像的边缘,接着使用轮廓检测和轮廓近似得到光滑的曲线,最后画出轮廓并返回光滑的图像。
接下来,在主函数中,我们读取输入目录中的所有图片文件,并使用`smooth_skeleton`函数进行处理,并将处理后的图像保存到输出目录中。在这个过程中,我们使用了`cv2.imread`和`cv2.imwrite`函数来读取和保存图片文件。
注意,在本示例中,我们假设输入目录和输出目录已经存在,并且所有的输入文件都是png或jpg格式的图片文件。如果需要处理其他格式的图片文件或者需要创建目录,请根据实际情况修改代码。
阅读全文