3

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

getDrawingCache()我使用和制作了低分辨率位图createScalledBitmap()

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

有什么方法可以在不丢失像素的情况下将图像调整为高分辨率?openCV有这种类吗?

4

3 回答 3

5

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

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

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

有一些算法和技术用于插值(猜测)插入的像素应该是什么样子以避免锯齿状边缘等。维基百科有一些关于各种基于插值的缩放技术超级采样作为起点的好信息。请注意,尽管这些技术都不会创建新信息,但它们只会平滑边缘并使缩放后的图像看起来不那么锯齿状。

于 2012-10-09T08:37:14.447 回答
1

您应该做的是创建一个大小为 612 X 612 的原始图像,然后缩小大小并将其另存为其他内容,这样您就有一个原始的大图像和一个小图像。从大到小比从小到大更容易。

于 2012-10-09T07:52:02.300 回答
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();
        }
    }
于 2012-11-19T07:27:53.663 回答