如何在不丢失像素的情况下将图像调整为高分辨率图像?

时间:2012-10-09 07:42:03

标签: java android image-processing opencv

我正在处理一些图像处理任务。

我使用getDrawingCache()createScalledBitmap()

制作了低分辨率的位图

但是当我将此图像调整为高分辨率时,请说612 X 612我的图像变得模糊。它看起来很糟糕。

有没有办法在不丢失像素的情况下将图像调整为高分辨率? openCV有这种类吗?

3 个答案:

答案 0 :(得分:5)

你做不到。如果您的图像是200x200,那么它包含的信息像素数。如果你扩展它,它仍然是相同数量的信息,只有你必须将它传播到更广泛的区域。

可以这样想 - 比如说你的图像是一个像素,而像素是蓝色的。现在,您希望将该图像缩放到两个像素。第二个像素应该是什么颜色?答:它可以是任何东西。第一个像素中没有信息可以权威地决定第二个像素应该是什么样子,没有可用的信息。

所以,这不是你所说的“丢失像素”的问题,而是添加新像素而没有关于它们应该是什么样的信息的问题。因此,调整大小使用它所具有的信息,其基本上是“使插入/新像素与最近的相邻预先存在的像素相同的颜色”。

有插值(猜测)插入像素应该是什么样的算法和技术,以避免锯齿状边缘等。维基百科在各种interpolation-based scaling techniquessupersampling上有一些很好的信息作为起点。请注意,虽然这些技术都没有创建新信息,但它们只会平滑边缘并使缩放后的图像看起来不那么锯齿。

答案 1 :(得分:1)

您应该做的是创建尺寸为612 X 612的原始图像,然后缩小尺寸并将其保存为其他内容,这样您就可以拥有原始的大图像和小图像。从大到小的图像很容易从小到大。

答案 2 :(得分:1)

我已经使用资产解决了这个问题。

(1)将我的所有图像放入资产文件夹

(2)使用输入流

读取图像

现在我不需要调整它,它可以正常工作。像这样:

private void setThemeBackgroundImage(String imageName, Button themeButton) {

        try {
            InputStream backgroundBitmap = getAssets().open(imageName);
            Bitmap immutableBitmap = BitmapFactory
                    .decodeStream(backgroundBitmap);

            themeButton.setBackgroundDrawable(new BitmapDrawable(
                    getResources(), immutableBitmap));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }