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

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

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

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

Q&A

解決済

1回答

859閲覧

画素の総数が知りたい(マルチスケール)

tiroha

総合スコア109

Python

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

0グッド

0クリップ

投稿2022/01/08 03:07

以下のコードで2つのマルチスケール画像を比較して、一致しない画素値の総数を出力します。
2つの画像はグレースケール画像なので、cv2.imreadmultiの引数を0にしているのですが、
これであっていますか?ANY_COLORの時と値が変わりません。

python

1import cv2 2import numpy as np 3 4# 画像を比較し、一致していない箇所を表示する 5 6# 元画像 7# 単一画像 8#img_original = cv2.imread("a/569_OUT.jpg") 9 10#マルチスケール画像 11r, img_original = cv2.imreadmulti('MVI354_32/Target/00065_00096.tif', [], 0) 12 13# 比較対象画像(単一画像) 14#img_comparison1 = cv2.imread("a/570_OUT.jpg") 15#マルチスケール画像 16r, img_comparison1 = cv2.imreadmulti('test3_3D/32/out02.tiff', [], 0) 17 18#比較画像の画素値が一致しない総数を出力 19print(sum(np.sum(img_original[i] != img_comparison1[i]) for i in range(len(img_comparison1)))) 20 21 22''' 23# 画素がどのくらい一致しているかを確認する(一致している画素数を出力) 24print(np.count_nonzero(img_original == img_comparison1)) 25print(np.count_nonzero(img_original == img_comparison2)) 26'''

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

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

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

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

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

guest

回答1

0

ベストアンサー

2つの画像はグレースケール画像なので、cv2.imreadmultiの引数を0にしているのですが、

これであっていますか?ANY_COLORの時と値が変わりません。

合っていると思います。

理由は以下の通りです。

公式のFlags used for image file reading and writingによると、

定数説明
cv::IMREAD_GRAYSCALE0If set, always convert image to the single channel grayscale image (codec internal conversion).
cv::IMREAD_ANYCOLOR4If set, the image is read in any possible color format.

とあります。

つまり、
グレースケール画像-->IMREAD_GRAYSCALE(0)-->グレースケール画像
グレースケール画像-->IMREAD_ANYCOLOR(4)--->グレースケール画像(最適な条件で読んでも元のグレースケールのまま)

マルチスケール画像-->IMREAD_GRAYSCALE(0)-->グレースケール画像
マルチスケール画像-->IMREAD_ANYCOLOR(4)--->マルチケール画像(最適な条件で読み込むと元のマルチスケール)


もし意図と違う回答でしたら、実際の画像をアップロードした上でコメントください。

投稿2022/01/09 00:53

編集2022/01/09 00:57
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tiroha

2022/01/09 02:39

ありがとうございます。 画像は訳あって、公開することができません。すいません。 RGBではなくちゃんとグレースケールで呼び出しができているということでしょうか? 実際の出力が132286です。 8フレーム重ねた画像で、サイズは256×256。白黒画像。 フレーム数で割った値が 132286/8=16535 となります。
退会済みユーザー

退会済みユーザー

2022/01/09 04:10

> RGBではなくちゃんとグレースケールで呼び出しができているということでしょうか? 元がグレースケールであれば、「マルチスケールに変換(例えばimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR))する処理をしない限り」読み込んだ画像はグレースケールのはずです。 どうしても心配であれば、以下のようにすると、(height,width,channel)を確認できます。 print(img_original.shape) print(img_comparison1 .shape) グレースケールだとchannel情報がないので(height,width)の形で返ってくるか、特殊なフォーマットであれば(height,width,1)のように返ってくるはずです。 参考: > 画像は訳あって、公開することができません。 代わりに縦横チャネル数、数値の型は実物の画像に沿ったものにして、ダミー画像をnp.ones((height,width,channel),np.uint8)*128みたいな感じで作れます。
tiroha

2022/01/09 04:36

ありがとうございます。 そうなんですね。 教えていただいた、2つのprint分を記述して実行すると、以下のエラーが出ます。 1枚のみの画像(マルチスケール画像ではない)ものだとうまく出力されるのですが、マルチスケール画像だとうまくいかないみたいです。 Traceback (most recent call last): File "test_image_multi.py", line 20, in <module> print(img_original.shape) AttributeError: 'list' object has no attribute 'shape'
退会済みユーザー

退会済みユーザー

2022/01/09 04:55

マルチスケール画像はたぶん[img,img]のように画像がリストに格納されるっぽいですね。 やり方は汚いですが、とりあえず以下のようにやると中身はみえるはずです。 [print(img_single.shape) for img_single in multiscale_img]
tiroha

2022/01/09 05:04

ありがとうございます。 実行すると、以下のように出てきます。 File "test_image_multi.py", line 20 print(img_single.shape) for img_single in multiscale_img ^ SyntaxError: invalid syntax 画像は2枚ともマルチスケール画像なので、img_single.shapeが出てくるのは違和感があるのですが、どういうことでしょうか?
退会済みユーザー

退会済みユーザー

2022/01/09 12:34

[]で囲ってください
tiroha

2022/01/10 13:27

ありがとうございます。 []で括ると、以下のエラー文が出てきます。 Traceback (most recent call last): File "test_image_multi.py", line 20, in <module> [print(img_single.shape) for img_single in multiscale_img] NameError: name 'multiscale_img' is not defined
tiroha

2022/01/10 13:31

[print(img_original.shape) for img_original in img_comparison1] であっていますかね? 実行すると、 (256,256) というのが11行出力されます。
退会済みユーザー

退会済みユーザー

2022/01/10 13:31

multiscale_imgは、img_originalとimg_comparison1に該当します。 どちらのshapeを確認したいときはmultiscale_imgをimg_originalで回すのと、img_comparison1で回すのをして確認してください。
tiroha

2022/01/10 13:44

ありがとうございます。そうなんですね。 img_comparison1の時は(256,256)が16行。 img_originalの時は(256,256)が16行。 出力されました。 これってチャネル数が省略されているので、ちゃんとグレースケールで呼び出せているということであっていますよね?
退会済みユーザー

退会済みユーザー

2022/01/10 21:36

そうなります、グレースケールだと(256,256)がxyとして吐き出されます。ちゃんとグレースケールになっているとみてよいです。
tiroha

2022/01/11 02:32

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問