2017-12-19 26 views
6

私は科学的な文脈で画像処理をしています。ハードドライブにイメージを保存する必要があるときはいつでも、イメージを保存し直して保存し直すことができます。私は排他的にPNG形式を使用していますが、常にロスレスな形式であるという印象を受けています。間違ったビット深度を使用していない場合、これは常に正しいですか?エンコーダとデコーダは全く役割を果たさないのでしょうか? 2D numpyのアレイ 可逆PNG画像を作成していますか?

  • は0から255
  • の整数値は、例えば、OpenCVのimwrite()関数でエンコードされ持っているように、具体的に、私は

    • を保存する画像が存在していますcv2.imwrite("image.png", array)
  • +5

    このシナリオでは、「ピクセル完璧」*データ以外のものを得ることはできません。 –

    +4

    疑問がある場合は、画像をもう一度読み込んでabsdiffを計算し、サンプル画像のある程度の量の結果ピクセルが0でないかどうかをテストします。 – Micka

    +0

    @Mickaいい考えですが、やっぱりヒューリスティックです。そこには多くの情報があり、人々はPNGがこのケースでは損失を被る可能性があると言いました。その場合、グレー値やテクスチャなどが良いだけです...私は幾分混乱していました。少なくとも私の特別なケース:) – speedymcs

    答えて

    2

    PNGがlossless format by design次のとおりです。PNGの圧縮は完全にロスレスなので

    - そしてそれは48ビットトゥルーカラーまたは16ビットグレースケールまでサポートするので - 、保存復元して再保存標準JPEGとは異なり(最高品質の設定であっても)画像の品質が低下することはありません。

    エンコーダとデコーダは、画像を正しく読み取る上で重要ではありません。 (もちろん、彼らはバグではないと仮定します)。

    TIFFと異なり、PNG仕様では、実装者がサポートする機能を選択して選択する余地がありません。その結果、1つのアプリケーションに保存されたPNG画像は、他のPNGをサポートしているアプリケーションで読み取ることができます。

    +0

    ありがとう!エンコーダは圧縮率の点で劇的に変化するようですが、OpenCVが他のものよりも多くの性能を発揮する標準的なものもあります:https://stackoverflow.com/a/12216875/5522601 – speedymcs

    関連する問題