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

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

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

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

Python

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

Q&A

解決済

2回答

744閲覧

python,opencvにおけるCb成分画像作成について

imariyaki

総合スコア1

OpenCV

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

Python

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

0グッド

0クリップ

投稿2020/10/01 15:33

前提・実現したいこと

python初心者ですが画像処理に関するプログラムを書いています。
現在ファイル内の.jpg画像を全てCb成分の画像に変換するコードを書きたいです。

発生している問題・エラーメッセージ

しかし処理した画像が真っ白のものができてしまい画像の処理ができません。

該当のソースコード

python

1import cv2 2import numpy as np 3import glob 4 5gazousu = len(glob.glob('*.jpg')) 6 7def numpy_gray(src): 8 r, g, b = src[:, :, 0], src[:, :, 1], src[:, :, 2] 9 gray = -0.1687 * r - 0.3313 * g + 0.5000 * b + 128 10 11if __name__ == "__main__": 12 13 count = 0 14 files = glob.glob('*.jpg') 15 for f in files: 16 17 count += 1 18 count_padded = '%05d' % count 19 20 w = 0 21 while w < gazousu: 22 23 img = cv2.imread(f) 24 25 gray_num = numpy_gray(img) 26 27 w = w + 1 28 write_file_name = count_padded + ".jpg" 29 cv2.imwrite(write_file_name, gray_num)

試したこと

最後の3行を

w = w + 1
write_file_name = count_padded + ".jpg"
cv2.imwrite("gray_num.jpg", gray_num)

とすればCb成分の画像を生成できましたが、無論上書き保存の形になり最後の1枚しか生成できません。

どなたか助けていただけないでしょうか。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

numpy_gray()関数が何も値を返していないので
下記のように直してみてはいかがでしょうか。

def numpy_gray(src): r, g, b = src[:, :, 0], src[:, :, 1], src[:, :, 2] gray = -0.1687 * r - 0.3313 * g + 0.5000 * b + 128 src[:, :, 0], src[:, :, 1], src[:, :, 2] = gray, gray, gray return src

投稿2020/10/01 16:09

編集2020/10/01 16:27
sfdust

総合スコア1137

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

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

imariyaki

2020/10/02 13:59

ベストアンサーの方のおかげで解決できました。 今後の同様の質問者のために完成したコードを記載しておきます。 ありがとうございました
guest

0

python

1import cv2 2import numpy as np 3import glob 4 5gazousu = len(glob.glob('*.jpg')) 6 7def numpy_gray(src): 8 r, g, b = src[:, :, 0], src[:, :, 1], src[:, :, 2] 9 gray = -0.1687 * r - 0.3313 * g + 0.5000 * b + 128 10 src[:, :, 0], src[:, :, 1], src[:, :, 2] = gray, gray, gray 11 return src 12 13 # Cr画像 14 # gray = 0.500 * r - 0.4186 * g - 0.0813 * b + 128 15 # Cb画像 16 # gray = -0.1687 * r - 0.3313 * g + 0.5000 * b + 128 17 18if __name__ == "__main__": 19 20 count = 0 21 files = glob.glob('*.jpg') 22 for f in files: 23 24 count += 1 25 count_padded = '%05d' % count 26 27 w = 0 28 while w < gazousu: 29 30 img = cv2.imread(f) 31 32 gray_num = numpy_gray(img) 33 34 w = w + 1 35 write_file_name = count_padded + ".jpg" 36 cv2.imwrite(write_file_name, gray_num)

投稿2020/10/02 13:54

imariyaki

総合スコア1

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

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

bsdfan

2020/10/03 01:21

opencvでは、RGBがBGRの順に入ってると思うのですが、それは大丈夫ですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問