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

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

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

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

Q&A

解決済

1回答

747閲覧

pythonでfft画像をopencvのimwiriteで保存したい

trtr

総合スコア2

Python

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

0グッド

0クリップ

投稿2023/01/07 06:05

前提

pythonでfft変換した画像をopencvのimwriteで保存しようとすると真っ黒な画像が保存されてしまいます。imshowでは正しい画像が表示されています。

実現したいこと

正しい画像を保存する。

該当のソースコード

python

1import numpy as np 2import matplotlib.pyplot as plt 3import cv2 4 5img = cv2.imread("/content/Tree.jpeg") 6X=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 7X=np.fft.fft2(X) 8X=np.fft.fftshift(X) 9X=np.abs(X) 10X=np.log(X.real+1) 11#X=X.astype(np.uint8) 12 13plt.imshow(X, cmap='gray', interpolation='none') 14plt.show() 15 16print('Type', type(X)) 17print('data type: ', X.dtype) 18 19cv2.imwrite("fft.jpeg",X)

試したこと

https://teratail.com/questions/204059
ここでの回答にあるように、unit8の変換も試しましたが駄目でした。

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

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

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

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

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

jbpb0

2023/01/10 12:44

「plt.imshow」では、画像の一番暗いところを黒で、一番明るいところを白で表示するように、自動的に明るさが調整されますが、「cv2.imwrite」では明るさが調整されないので、 > opencvのimwriteで保存しようとすると真っ黒な画像が保存されてしまいます。 となります > imshowでは正しい画像が表示されています。 逆です 明るさが調整されない「cv2.imwrite」の方が、本当は正しいのです 数値が小さすぎると、全部黒にしか見えませんが、本当は微妙に明るさが変わってて、その値はfftの結果通りなのです
jbpb0

2023/01/10 12:47

plt.imshow(X, cmap='gray', interpolation='none') ↓ 変更 plt.imshow(X, cmap='gray', interpolation='none', vmin=0, vmax=255) としたら、「plt.imshow」でも明るさの調整がされなくなるので、 > opencvのimwriteで保存しようとすると真っ黒な画像が保存されてしまいます。 と同様になります
jbpb0

2023/01/10 12:56

cv2.imwrite("fft.jpeg",X) ↓ 変更 Xn = (X - X.min()) / (X.max() - X.min()) * 255 cv2.imwrite("fft.jpeg",Xn) としたら、「plt.imshow」と同様に明るさ調整がされたデータ「Xn」が「cv2.imwrite」で保存されます
guest

回答1

0

ベストアンサー

スケールが元のままなので、[0, 255] の範囲でスケールアップします。

python

1cv2.imwrite("fft.jpeg", X*255/np.max(X))

投稿2023/01/07 06:19

編集2023/01/07 06:24
melian

総合スコア19712

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

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

trtr

2023/01/13 06:41

無事解決いたしました、ありがとございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問