【发布时间】:2016-04-11 16:32:23
【问题描述】:
我有一个 512x160 像素的黑白图像,我想使用 OpenCV 将其放大(到 4096x1280)。负(白色)像素保持负值是非常重要的。 cv2.resize 默认情况下似乎对图像进行抗锯齿处理,从而产生误报像素。有没有办法禁用抗锯齿?
编辑:据我所知,这里是插值方法:
- INTER_NEAREST - 最近邻插值
- INTER_LINEAR - 双线性插值
- INTER_CUBIC - 双三次插值
- INTER_AREA - 使用像素区域关系重新采样。它可能是一个 图像抽取的首选方法,因为它不会产生莫尔条纹 结果。但是当图片被缩放时,它类似于INTER_NEAREST方法。
- INTER_LANCZOS4 - 8x8 邻域的 Lanczos 插值。
- INTER_MAX - 插值代码的掩码。
- WARP_FILL_OUTLIERS - 标志,填充所有目标图像像素。 如果其中一些对应于源图像中的异常值,则它们是 设置为零。
- WARP_INVERSE_MAP - 标志,逆变换。
【问题讨论】:
-
在 c++ 中你可以选择插值类型,python 可能相同。您可能想要使用 CV_INTER_NEAREST 模式
-
@Micka 谢谢,“最近邻插值”到底是什么意思?
-
调整大小后,不清楚新像素将获得哪种颜色。通常,您在该区域中的源图像像素之间进行插值。 INTER_NEAREST 改为选择源图像中最近像素的颜色。
-
对于任何感兴趣的人,INTER_NEAREST 仍然给了我一些“误报”像素。我通过将图像大小调整为 np 数组解决了这个问题:
np.repeat(np.repeat(image,8, axis=0), 8, axis=1) -
我发现
scipy.misc.imresize是cv2.resize的更好替代品,用于在 Python 中使用 OpenCV 时放大图像。根据this answerscipy.ndimage.zoom也是一种选择。