Dav*_*vid 1 python pdf matplotlib
我的目标是显示二值图像,然后将边界轮廓绘制为覆盖图像的线。如果我这样做并将结果导出为 PDF,当人们从左下角移过图像时,我会看到图像和轮廓之间的错位逐渐恶化。因此,背景图像或轮廓的位置似乎存在乘法误差。
我认为这个问题是由 PDF 渲染器引起的。如果我以非常高的 DPI 以 PNG 格式输出结果,我可以解决该问题,但由于其他原因我更喜欢 PDF。有谁知道我是否可以更改设置以使 PDF 正确渲染?
这是一个示例和生成的图像。您可以看到左下角图像和轮廓之间的对齐情况良好,右上角最差。
import numpy as np
import matplotlib.pyplot as plt
import cv2
# Make a test image
img = np.zeros((100,100), dtype=np.uint8)
img[20:99,1:80] = 1
img = np.matlib.repmat(img, 9, 6)
# Extract contours
cntrs, hier = cv2.findContours(img, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
# Make overlay
fig = plt.figure(figsize=(6,9), dpi=300)
ax = fig.add_subplot()
ax.imshow(img, interpolation='none', cmap=plt.cm.gray)
for cntr in cntrs:
x = np.append(cntr[:, 0, 0], cntr[0, 0, 0])
y = np.append(cntr[:, 0, 1], cntr[0, 0, 1])
ax.plot(x, y, c='r', linewidth=0.5, alpha=0.7)
ax.axis('off')
# Save overlay
plt.savefig('test.pdf', dpi=fig.dpi)
Run Code Online (Sandbox Code Playgroud)
您可以使用pgf后端而不是默认的pdf后端:
plt.savefig(\'test.pdf\', dpi=fig.dpi, backend=\'pgf\')\nRun Code Online (Sandbox Code Playgroud)\n这给出了与 png 文件相同的正确 pdf:链接到生成的 pdf 文件:
\n\npdf:115.358 x 172.861 毫米,左下角位于 20.574 / 28.575 毫米,
\npgf:115.057 x 172.606 毫米,左下角位于 20.574 / 28.606 毫米。
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |