用python写一个图像边界线提取和骨架化提取代码 要求图像批量输入和图像批量输出
时间: 2024-05-11 17:18:11 浏览: 77
好的,我可以为您提供一个基于Python的图像边界线提取和骨架化提取代码,支持图像批量输入和图像批量输出。
首先,您需要安装以下库:
- NumPy:用于数学计算和数组操作
- OpenCV:用于图像处理和计算机视觉
可以使用以下命令安装这些库:
```
pip install numpy opencv-python
```
接下来,让我们看一下代码:
```python
import cv2
import numpy as np
import os
# 设置输入和输出文件夹路径
input_folder = 'input_folder'
output_folder = 'output_folder'
# 创建输出文件夹
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 遍历输入文件夹中的所有图像文件
for filename in os.listdir(input_folder):
if filename.endswith('.jpg') or filename.endswith('.png'):
# 读取图像
img = cv2.imread(os.path.join(input_folder, filename))
# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 进行边界线提取
edges = cv2.Canny(gray, 100, 200)
# 进行骨架化提取
size = np.size(edges)
skel = np.zeros(edges.shape, np.uint8)
ret, edges = cv2.threshold(edges, 127, 255, 0)
element = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))
done = False
while not done:
eroded = cv2.erode(edges, element)
temp = cv2.dilate(eroded, element)
temp = cv2.subtract(edges, temp)
skel = cv2.bitwise_or(skel, temp)
edges = eroded.copy()
zeros = size - cv2.countNonZero(edges)
if zeros == size:
done = True
# 保存输出图像
output_filename = os.path.join(output_folder, filename)
cv2.imwrite(output_filename, skel)
```
首先,我们设置了输入和输出文件夹的路径。然后,我们遍历输入文件夹中的所有图像文件,并进行以下操作:
1. 读取图像并将其转换为灰度图像。
2. 进行边界线提取,使用 `cv2.Canny` 函数实现。
3. 进行骨架化提取,使用基于膨胀和腐蚀的算法实现。
4. 保存输出图像到输出文件夹中。
这个代码可以批量处理多个图像文件,您只需要将所有图像文件放在输入文件夹中即可。输出文件夹中将包含与输入文件夹中相同数量的图像文件,这些文件包含输入图像的边界线和骨架化结果。
希望这个代码对您有所帮助!
阅读全文