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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

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

Python

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

Q&A

解決済

1回答

4722閲覧

16bitの画像rawデータをtifに変換したい

hasy

総合スコア4

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2021/12/25 03:45

編集2021/12/25 07:08

pythonで16bitリトルエンディアンのrawデータを読み込み、tiffファイルに変換したいのですがうまくいきません。
画像は出力されますが、正常な画像になっていません。(rawと違う。何が写っているかわからない)
また、データの容量がrawの2倍になっています。
以下のコードでおかしなところがあれば教えてください。
また、rawデータをtifに変換する別の方法があれば教えていただけないでしょうか。

追記
尚、rawデータはイメージセンサーの出力データそのものをバイナリで保存したものです。
(このrawデータは正しく保存されていることは、rawを表示するソフトで確認済み)
1画素=16bitのリトルエンディアンで、符号はなしの整数です。

コードは以下です。 python
コード
Imagesize=[2592,1922]
with open(filename +".raw","rb") as f: #2byteのrawデータファイル
data=f.read()
img = Image.frombytes('F', Imagesize, data,"raw", 'F;16B')
img.save("test.tif")

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

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

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

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

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

can110

2021/12/25 03:59

コードブロックが正常に表示されていないので修正ください(最後の```が抜けている?) また、具体的に何がどううまくいっていないのかを記載ください。 (エラーが発生する、意図した画像になっていないなど)
hasy

2021/12/25 06:18

ご指摘ありがとうございます。 初学者のためいろいろ不備がありすいません。修正しました。 よろしくお願いします。
can110

2021/12/25 06:34

元のバイナリ(raw)データについての情報をより詳細に記載すると回答得られやすくなるかと思います。 たとえば、そのデータはどのような手段(他ソフト、コード)で作成されたのか。 1画素=16bitリトルエンディアンだとして、それは符号付or無の整数あるいは浮動or固定小数点値と扱うべきなのかなど。
y_waiwai

2021/12/25 06:37

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、いらぬ翻訳省略しないで、出たそのママをコピペで提示してください
hasy

2021/12/25 06:57

いろいろご教授ありがとうござます。 rawデータはイメージセンサーの出力データそのものをバイナリで保存したものです。 (このrawデータは正しく保存されていることは、rawを表示するソフトで確認済み) 1画素=16bitのリトルエンディアンで、符号はなしの整数です。 また、現状はエラーなしでtifは保存されていますが、画像が正常でありません。(rawと違う。何が写っているかわからない) あと、保存されたtifデータの容量がrawの2倍になっているのも疑問です。 また、リトルエンディアンなら 'F;16B'の部分が 'F;16L'ではないかというご指摘をいただきましたが、ご指摘の通り修正すると以下のエラーがでます。 ValueError: unknown raw mode
melian

2021/12/25 07:27

「リトルエンディアンで符号はなしの整数」であれば I;16L ではないでしょうか。
hasy

2021/12/25 07:43

ありがとうございます。 I;16Lをためしましたが、F;16Lのときと変わらず、下記エラーがでます。 ValueError: unknown raw mode
melian

2021/12/25 07:51

今気がついたのですが、 img = Image.frombytes('I;16L', Imagesize, data, "raw") としていますか?(mode は第一パラメータで指定)
hasy

2021/12/25 08:05

ありがとうございます。 ご指摘のとおり修正したところエラーが変わりました。 このrawデータはtiff保存ができない??? OSError: cannot write mode I;16L as TIFF また、こういう引数の順番や書き方などはどこで調べることができるのでしょうか。
hasy

2021/12/25 08:24

ありがとうございます。大変参考になります。
guest

回答1

0

ベストアンサー

ぱっと見て気になるのは、'F;16B'です。
16bitリトルエンディアンなら'F;16L'でしょう。
16bitリトルエンディアンなら'I;16L'でしょう。(melianさんのご指摘のとおり)
16bitリトルエンディアンということは、モノクロで16ビットの画像ですがそれであっていますか。

PIL.Image.frombytes(mode, size, data, decoder_name='raw', *args)

Modes
を読み直してみましたが、「16bitリトルエンディアンのモノクロで16ビットのrawデータ」ならば

img = Image.frombytes('I;16L', Imagesize, data,"raw")

で変換できるはずです。

OSError: cannot write mode I;16L as TIFF
とのことですね。なんとなくそうなりそうな気がしてPILでuint16の画像をTIFFでsaveできるかを調べてみたのですが、見つからなかったので前回の回答をしました。

cv2でuint16の画像をTIFF形式で保存したものを画像処理ソフトで開いてみたところ、Grayの16ビット画像として開くことができました。

したがって、PILのuint16の画像をdtypeがnp.uint16のndarrayに変換できれば保存できるはずです。

python

1Imagesize=[2592,1922] 2with open(filename +".raw","rb") as f: #2byteのrawデータファイル 3 data=f.read() 4img = Image.frombytes('I;16L', Imagesize, data,"raw") 5img_ndarray = np.array(img, dtype=np.uint16) 6cv2.imwrite('test.tiff', img_ndarray)

投稿2021/12/25 04:55

編集2021/12/25 11:07
ppaul

総合スコア24670

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

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

hasy

2021/12/25 06:16

ご回答ありがとうございます。 ご指摘のF;16BをF;16Lに変更しましたが、エラーがでて出力もされなくなりました。 ValueError: unknown raw mode 初学者なのでいろいろ不備がありますが、ご教授お願いします。
hasy

2021/12/25 08:20

ご回答ありがとうございます。 データは、ご指摘のとおり「16bitリトルエンディアンのモノクロで16ビットのrawデータ」です。 修正することで現在のエラーは、最終行の「img.save("test.tif")」に進みました。 OSError: cannot write mode I;16L as TIFF というエラーがでているのですが、tiffにはできないということなのでしょうか?
ppaul

2021/12/25 11:08

回答に追加しました。
hasy

2021/12/25 12:30

ありがとうございました。ご教授いただいたコードでtiff出力ができました。 本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問