2013-06-27 79 views
1

所以,我有一个数字扫描仪的图像,它的分辨率是26万像素。 我想将图像的分辨率降低到5百万像素。如何降低OpenCV中图像的分辨率?

是否可以降低图像的分辨率而不损坏内容?

如果是,如何在OpenCV实现中降低它?

任何帮助将不胜感激。 Thankyou

+0

意思是这个还是别的?请更具体一些。 (http://stackoverflow.com/questions/8339077/decrease-image-resolution-in-opencv) – ondrejdee

+0

你是什么意思的“不破坏内容”? – Mikhail

+0

不,这不是我之前的意思,我已经用数字扫描仪扫描了图像。没有涉及相机。我只需要降低图像的分辨率。 – anarchy99

回答

10

您可以使用cv2::resize()

resize(src, dst, Size(), factor, factor, interpolation); 

这里,interpolation可以选择为cv::INTER_LANCZOS4获得最佳插值结果。

factor是采样率,并且为了从26mp转变为5MP您可能需要它是2.28

总是下采样引入了一些信息和细节的损失。

+0

谢谢你的回答,这是我一直在寻找的。 – anarchy99

+0

对于收缩,“系数”将<1,您可以改为设置系数= 0,并提供所需的输出尺寸作为第三个参数。 INTER_LANCZOS4对收缩没有任何影响。你会得到与INTER_AREA相同的结果,两者都不是很好(相当多的别名)。这是OpenCV中的一个漏洞 - 对于单步收缩没有太好的方法(立方体和lanczos滤波器不适合收缩)。你可以尝试使用INTER_AREA缩小到2倍所需的大小,然后使用pyrDown来获得最终结果。将有更少的别名,但可能有点模糊。 – greggo

0

降低图像的分辨率是损坏内容的定义。无损图像压缩不会降低图像的分辨率。这就是说5百万像素仍然是一个非常高的分辨率,而且大多数应用程序都需要。例外情况可能是科学和医疗应用。我会确保您保留原始图像,直到您知道可以使用结果并仔细选择图像压缩方法以减少伪像。