4

.jpg 画像を読み取り、その RBG コンポーネントの一部を変更して、画像サイズを変更せずに再度保存する Python コードを作成したいと考えています。

OpenCV と PyGame を使用して画像を読み込もうとしましたが、3 つの異なる関数を使用して単純な読み込み/保存コードを試したところ、結果の画像のサイズが最初の画像よりも大きくなりました。これは私が使用したコードです。

>>> import cv, pygame # Importing OpenCV & PyGame libraries.
>>> image_opencv = cv.LoadImage('lena.jpg')
>>> image_opencv_matrix = cv.LoadImageM('lena.jpg')
>>> image_pygame = pygame.image.load('lena.jpg')
>>> cv.SaveImage('lena_opencv.jpg', image_opencv)
>>> cv.SaveImage('lena_opencv_matrix.jpg', image_opencv_matrix)
>>> pygame.image.save(image_pygame, 'lena_pygame.jpg')

元のサイズは 48.3K で、結果は 75.5K、75.5K、49.9K です。

だから、私はロード/保存だけをしたかどうかはわかりませんが、画像の元のサイズを変更する何かが欠けているかどうかはわかりませんか?

また、OpenCV や PyGame よりも優れたライブラリはありますか?!

4

2 に答える 2

7

JPEG は非可逆画像形式です。1 つを開いて保存すると、画像全体が再度エンコードされます。品質設定を調整して元のファイル サイズに近づけることはできますが、画質はいくらか低下します。元の品質設定が何であったかを知る一般的な方法はありませんが、ファイル サイズが重要な場合は、それに近づくまで推測できます。

于 2012-09-07T18:01:54.557 に答える
3

JPEG 出力のサイズは、次の 3 つの要素に依存します。

  1. 元の画像の寸法。あなたの場合、これらは3つの例すべてで同じです。
  2. 画像内の色の複雑さ。ディテールの多い画像は、完全に空白の画像よりも大きくなります。
  3. エンコーダで使用される品質設定。あなたの場合、OpenCV と PyGame のほうが高いように見えるデフォルトを使用しました。より良い品質設定では、元のファイルに近い (損失が少ない) がサイズの大きいファイルが生成されます。

JPEG の損失の多い性質のため、これの一部は少し予測できません。特定の品質設定で画像を保存し、その新しい画像を開いて、まったく同じ品質設定で再度保存することができます。最初に保存したときに導入された変更により、サイズが多少異なる場合があります。

于 2012-09-07T18:19:20.057 に答える