我试图将这张图片缩小,但它会一直变形。
这是我应用细化的相关代码。我也尝试过“瘦身”。功能而不是' skeletonize'但结果是相似的。
$.getScript("script1.js", function() {
console.log("script1 loaded. You can use script1 variables here!");
});
我的目标是在变薄后获得与此相似的形状:
我做错了什么?我在网上看到,有时jpg文件会导致问题,但是我没有这方面的经验来证实这一点。
答案 0 :(得分:1)
我不确定您从输入图像到二进制文件的转换是否正确。这是一个使用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()
答案 1 :(得分:0)
从您的示例中,由于您的图像是二进制的,我认为您想要做的事情是通过(二进制)侵蚀更好地实现的。 Wikipedia很好地解释了这个概念。直观地(如果您没有时间阅读维基百科链接),想象您有一个二进制图像A
,就像您给出的那个,并且让我们调用A_1
A
的像素集,其值为1
。然后,您定义一个&#34;结构元素&#34; K
,例如可以是大小为n*n
的方形补丁。然后是伪代码
for pixel in A_1:
center K at pixel, and call this centered version K_pixel
if(K_pixel is contained in A_1):
keep pixel
else:
discard pixel
因此,这会使图像中的连接组件变薄。