2012-08-31 9 views
5

は同じ探して144KBの画像に変換します。OpenCV - imread()、imwrite()はpngのサイズを増やしますか? 33KBから<code>image</code>私の元この操作後に</p> <pre><code>image = cv2.imread("image.png") cv2.imwrite("image_processed.png", image) </code></pre> <p>(Iは、Pythonを使用して)私は、ファイルにいくつかの簡単な操作を試してみたかったと私は開口部で開始し、ファイルを保存

私はこのような何かやって試してみました:

http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imwrite#imwrite

params = list() 
    params.append(cv.CV_IMWRITE_PNG_COMPRESSION) 
    params.append(8) 

    image = cv2.imread("image.png") 
    cv2.imwrite("image_processed.png",image,params) 

をしかし、これはあまり変化しない。これは、私が働いているイメージです

(サイズは132KBまで減少しました) enter image description here

+0

私はpng圧縮で同じ問題を抱えていました。 'scikit-image'に切り替わり、' imsave'が働いた不思議を使いました。 – letmaik

答えて

5

GIMPのようなpngライターは、標準のlibpngよりもはるかに優れた圧縮PNGを書き込みます〜によってopencv。また、Imagemagickを使ってイメージを開いて保存することもできます(OpenCVと比較して)。

pngcrushのように、PNGをよりよく再圧縮しようとする特殊なソフトウェアさえあります。

問題の画像を提供できますか?ファイルサイズの最適化に関して、私はそれを試してみたいと思います。

+0

私が働いている画像を追加しました。あなたの答えを考えてみると、私はpngのサイズを小さくできるプログラムがあるが、OpenCVの機能を使いたいと思う。 – Patryk

+1

元のPNGの代わりにJPEGファイルを用意していますので、実際に圧縮を見ることはできません。しかし、それ以外のもの:OpenCVを使ってより良い圧縮を得ることはできません。最後に、8ビットの代わりに16ビットのイメージを格納することがあります。これは、CV_16U行列を使用する場合に発生します。 – ypnos

2

ypnosがヒントしているように、ソースファイルはjpg(拡張子がpngの場合でも)です。そのため、png形式で保存すると、形式を変更するとき(jpg〜png)に、より多くの領域が使用されます。最後の行を置き換える

試してみてください。

cv2.imwrite("image_processed.jpg",image,params) 

そして、あなたは、サイズがそれほど変化していないことがわかります。

あるいは、そのままコードを維持するが、そのようなhttp://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png

0

セミ関連などの異なる画像を、使用し、私はmatplotlib.image.imsaveと同じ問題を有していた - それは16のように8ビットのグレースケール画像を救います-bitは、scipy.misc.bytescaleを使って8ビット配列であることを確認した後でも、サイズが大きくなった。ただし、scipy.misc.imsaveは8ビットイメージとして正しく保存されました。

関連する問題

 関連する問題