细化/骨架化扭曲了我的形象

L L*_*iat 0 python opencv image-processing computer-vision scikit-image

我试图使该图像变薄,但它不断扭曲。

在此输入图像描述

在此输入图像描述

这是我应用细化的相关代码。我也尝试过“瘦”功能而不是“骨架化”,但结果相似。

from skimage.morphology import skeletonize, thin
new_im = cv2.imread(im_pth)
gray = cv2.cvtColor(new_im, cv2.COLOR_BGR2GRAY)
ske = (skeletonize(gray//255) * 255).astype(np.uint8)
cv2.imshow("image", gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

我的目标是在细化后获得与此类似的形状:

在此输入图像描述

我究竟做错了什么?我在网上读到,有时 jpg 文件会导致问题,但我没有该领域的经验来证实这一点。

Ste*_*alt 6

我不确定您从输入图像到二进制的转换是否正确。这是一个使用 scikit-image 函数的版本,它似乎可以满足您的需求:

from skimage import img_as_float
from skimage import io, color, morphology
import matplotlib.pyplot as plt

image = img_as_float(color.rgb2gray(io.imread('char.png')))
image_binary = image < 0.5
out_skeletonize = morphology.skeletonize(image_binary)
out_thin = morphology.thin(image_binary)


f, (ax0, ax1, ax2) = plt.subplots(1, 3, figsize=(10, 3))

ax0.imshow(image, cmap='gray')
ax0.set_title('Input')

ax1.imshow(out_skeletonize, cmap='gray')
ax1.set_title('Skeletonize')

ax2.imshow(out_thin, cmap='gray')
ax2.set_title('Thin')

plt.savefig('/tmp/char_out.png')
plt.show()
Run Code Online (Sandbox Code Playgroud)

skimage 中的骨架化和细化