python对灰度图像进行骨架提取并保存提取后的灰度图像,要求保留灰度信息
时间: 2024-03-23 21:38:11 浏览: 228
可以使用 Python 中的 OpenCV 库来对灰度图像进行骨架提取,并使用 OpenCV 库将提取后的灰度图像保存下来。
以下是一个示例代码:
```python
import cv2
# 读取灰度图像
img_gray = cv2.imread('your_image_path', cv2.IMREAD_GRAYSCALE)
# 对灰度图像进行二值化处理
_, img_binary = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
# 对二值化图像进行骨架提取
img_skeleton = cv2.ximgproc.thinning(img_binary)
# 将提取后的灰度图像保存下来
cv2.imwrite('skeleton.jpg', img_skeleton)
```
在这个示例代码中,我们首先使用 `cv2.imread` 函数读取灰度图像,然后使用 `cv2.threshold` 函数将灰度图像二值化处理。接下来,我们使用 `cv2.ximgproc.thinning` 函数对二值化图像进行骨架提取。最后,使用 `cv2.imwrite` 函数将提取后的灰度图像保存下来。
需要注意的是,在骨架提取之前,需要将灰度图像进行二值化处理。在骨架提取之后,得到的图像只保留了二值化后的信息,所以在保存提取后的灰度图像时,需要将其转换为灰度图像再进行保存。
相关问题
用python写一个图像边界线提取和骨架化提取代码 要求图像批量输入和图像批量输出
好的,我可以为您提供一个基于Python的边界线提取和骨架化提取代码,并支持批量输入和输出图像。
代码如下:
```python
import cv2
import os
# 边界线提取函数
def get_contour(img):
# 转换为灰度图像
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_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
return img
# 骨架化提取函数
def get_skeleton(img):
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 进行二值化处理
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
# 进行形态学处理,获取骨架
size = np.size(binary)
skel = np.zeros(binary.shape, np.uint8)
element = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))
done = False
while not done:
eroded = cv2.erode(binary, element)
temp = cv2.dilate(eroded, element)
temp = cv2.subtract(binary, temp)
skel = cv2.bitwise_or(skel, temp)
binary = eroded.copy()
zeros = size - cv2.countNonZero(binary)
if zeros == size:
done = True
# 显示骨架
cv2.imshow("skeleton", skel)
cv2.waitKey(0)
return skel
# 批量处理函数
def batch_process(path, process_func):
# 遍历指定路径下所有图像
for file_name in os.listdir(path):
# 仅处理jpg和png格式的图像文件
if file_name.endswith(".jpg") or file_name.endswith(".png"):
# 读取图像
img_path = os.path.join(path, file_name)
img = cv2.imread(img_path)
# 进行图像处理
img_processed = process_func(img)
# 保存处理后的图像
processed_path = os.path.join(path, "processed")
if not os.path.exists(processed_path):
os.makedirs(processed_path)
processed_file_name = os.path.splitext(file_name)[0] + "_processed.jpg"
processed_file_path = os.path.join(processed_path, processed_file_name)
cv2.imwrite(processed_file_path, img_processed)
# 测试
if __name__ == '__main__':
# 指定图像路径
img_path = "your_image_folder_path"
# 批量进行边界线提取
batch_process(img_path, get_contour)
# 批量进行骨架化提取
batch_process(img_path, get_skeleton)
```
在代码中,我们定义了两个图像处理函数:`get_contour` 和 `get_skeleton`,分别用于边界线提取和骨架化提取。这两个函数都接受一个图像作为输入,并返回处理后的图像。
我们还定义了一个批量处理函数 `batch_process`,该函数接受一个图像路径和一个处理函数作为参数,遍历指定路径下的所有图像,对每个图像应用指定的处理函数,并保存处理后的图像。
您只需要将您的图像放在指定路径下,运行代码即可批量处理所有图像。处理后的图像将保存在`processed`文件夹中。
python 汉字骨架提取
Python汉字骨架提取是指将汉字的形态进行简化,仅保留字形的骨架结构,以便于字体识别、书法分析和汉字特征提取等应用。下面是关于Python汉字骨架提取的简要步骤。
首先,我们需要导入相应的Python库,如OpenCV和NumPy。OpenCV是用于图像处理的流行库,NumPy是进行矩阵和数组操作的常用库。
其次,我们需要将汉字图像加载到Python中。可以使用OpenCV的`imread()`函数加载图像。
接下来,我们可以将彩色图像转换为灰度图像,以提取汉字的形态信息。我们可以使用OpenCV的灰度转换函数`cvtColor()`将图像转换为灰度图像。
现在,我们可以对灰度图像应用二值化处理。这可以帮助我们将图像转换为纯黑白的二值图像,以突出汉字的形态轮廓。我们可以使用OpenCV的二值化函数`threshold()`来实现。
一旦我们得到了二值图像,我们可以使用形态学操作来进一步处理图像并提取汉字的骨架。形态学操作包括腐蚀和膨胀等。我们可以使用OpenCV的形态学函数,如`erode()`和`dilate()`来完成这些操作。
最后,我们可以将提取的汉字骨架保存为图像或进行其他进一步的分析和处理。
Python汉字骨架提取是图像处理的一部分,通过使用OpenCV等库,我们可以实现这一过程。
阅读全文