3

私はいくつかの画像処理タスクに取り組んでいます。

とを使用して低解像度のビットマップを作成getDrawingCache()しましたcreateScalledBitmap()

しかし、この画像のサイズを 612 X 612 などの高解像度に変更すると、画像がぼやけてしまいます。そして、それはとても悪いように見えます。

ピクセルを失わずに画像のサイズを高解像度に変更する方法はありますか? openCV にはこの種のクラスがありますか?

4

3 に答える 3

5

できません。画像が 200x200 の場合、それが含まれる情報のピクセル数です。スケールアップしても、同じ量の情報でありながら、より広い領域に分散する必要があります。

次のように考えてみてください。1 ピクセルの画像があり、そのピクセルが青色であるとします。次に、その画像を 2 ピクセルまで拡大縮小します。2 番目のピクセルは何色にしますか? 答え: 何でも構いません。最初のピクセルには、2 番目のピクセルがどのように見えるべきかを正式に決定できる情報がありません。利用可能な情報はありません。

したがって、あなたが言うように「ピクセルを失う」という問題ではなく、どのように見えるべきかについての情報なしで新しいピクセルを追加するという問題です。したがって、サイズ変更では、基本的に「挿入された/新しいピクセルを、最も近い隣接する既存のピクセルと同じ色にする」という情報が使用されます。

ギザギザのエッジなどを避けるために、挿入されたピクセルがどのように見えるべきかを補間 (推測) するためのアルゴリズムとテクニックがあります。ウィキペディアには、出発点として、さまざまな補間ベースのスケーリング手法スーパーサンプリングに関する良い情報があります。これらの手法はいずれも新しい情報を作成しませんが、エッジを滑らかにし、スケーリングされた画像のギザギザを少なくするだけです。

于 2012-10-09T08:37:14.447 に答える
1

Assetsを使用してこれを解決しました..

(1) 私のすべての画像をアセットフォルダーに入れる

(2) inputstream を使用して画像を読み込む

今はサイズを変更する必要はなく、必要に応じて正常に動作します。このような:

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 に答える