質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3565閲覧

画像を読み込んで、ただ保存すると容量が変化してしまう理由を知りたいです。

ysk_snn

総合スコア21

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/16 06:38

前提・実現したいこと

PILで開いたtifファイルを、numpyでアレイ化してからcv2で保存すると、
容量が65,537 KB → 45,818 KBと、結構小さくなります。
理由を知りたいのですが、教えていただけないでしょうか。

該当のソースコード

python3

1import cv2 2import glob 3import numpy as np 4from PIL import Image 5import os.path 6 7src_path = r"C:" 8dst_path = r"C:" 9 10path_list = glob.glob(src_path + "/*.tif") 11path = path_list[1] 12im_arr = np.array(Image.open(path)) 13file_name = os.path.basename(path) 14save_path = os.path.join(dst_path, file_name.split('_')[2] + '.tif') 15cv2.imwrite(save_path, im_arr)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

理由を知りたいのですが、教えていただけないでしょうか。

配列で表される画像データをバイナリデータに変換する際に圧縮しているからです。
zip などと同じです。
jpg、png、tiff、webp など様々な画像圧縮形式があります。


「読み込む前のファイルサイズ」と「読み込んで再度保存したあとのファイルサイズ」で差がでることをいっているのであれば、圧縮形式またはそのパラメータがもとのファイルを保存したときと再度保存したときで異なるからだと思われます。

TIFFでは、非圧縮、LZW圧縮、ZIP圧縮、連長圧縮の一種であるPackBitsなど様々な圧縮方法が使用可能である。

Tagged Image File Format - Wikipedia

投稿2020/09/16 06:49

編集2020/09/16 06:54
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ysk_snn

2020/09/16 06:54

素早いご対応ありがとうございます! 今回の変換は tif → array → tif という流れですが、元の拡張̪子と変わらなくても圧縮後のサイズは変化するものでしょうか...? また、圧縮されたことによって次回以降arrayとしたときに値が変化したりしますか...? 初歩的な質問かもしれません、申し訳ありません...
tiitoi

2020/09/16 07:00 編集

例えば、jpg ファイルであれば 「もとのファイル」と「読み込んで再度jpgで保存したファイル」はファイルサイズが通常、異なります。また、非可逆圧縮なので、画素値もオリジナルとは異なった結果になります。 可逆圧縮であれば、ファイル化した際のファイルサイズは使用するライブラリ、ソフトウェアで差異が出るかもしませんが、読み込んだ際の画素値は何度保存を繰り返しても同じになるはずです。 > また、圧縮されたことによって次回以降arrayとしたときに値が変化したりしますか 元の画像を読み込んだ配列A 再度保存した画像を読み込んだ配列B で画素値が異なるかどうか比較すればいいと思います。異なれば、非可逆圧縮ということだと思います。
ysk_snn

2020/09/16 07:11

ご説明ありがとうございます! ちなみにライブラリtifffileを使ったら、圧縮なしで保存もできました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問