🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

Python

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

Q&A

2回答

8430閲覧

2枚の画像を比較し差異をグレー(同じ)、青→赤(赤になる程差が大きい)で表示する - Python

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

Python

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

1グッド

2クリップ

投稿2019/10/05 21:13

編集2019/12/06 04:41

Pythonで2枚の画像を比較し、差異を表示したい

Teratailでの初質問です。不適切な点があるかもしれませんが、ご容赦ください。

やりたいこと

大まかにはタイトルの通りですが、フローは次のようなものを想定しております。

  1. 画像を2枚読み込む
  2. 2枚の画像を”色”で比較する
  3. 比較した結果を保存
  4. 3のデータをもとに色に差が無いならグレー、差が小さければ水色、差が大きくなるにつれ赤色で表示

現状は画像を読み込む段階までで、「画像を比較」からその結果をもとに「画像を作成」することができておりません。

Python

1import cv2 2import Numpy 3img1 = cv2.imread(“img1.jpg”) 4img2 = cv2.imread(“img2.jpg”)

Pythonは以前Seleniumで少し使ったのみのため全体像を捉えられておらず、何の用途でどんなライブラリ等を使うのかといったものが分かりません。
参考になる考え方やサイト、記事等がありましたらご教授頂けないかと思います。
10/6 15:44追記
どうにも低評価が付けられているようですが、現在OpenCVのドキュメントを読みながら試行錯誤中です...。
10/6 20:59追記
難しいですね。
画像を読み込みグレイスケールにしたあと2枚の画像を比較。その結果から画像を作成し色味を適応。そうして画像は出来たのですが、それには次の問題がありました。

  1. 色が同じなら「白」にしたいが「青色」になる
  2. (1)の色と、差分を表示する「青色」の部分の区別が付かない

原因は差分が入っているimg_diffをapplyColorMapで「青色」の色味に調整しているためだと思われます。
ここを独自に「同じ色なら白」にし、「色の差が小さければ水色で、大きければ赤に」といった処理を行うものに書き換えれば目的とする結果が得られるのでは無いかと思いました。
しかし、それをどうやって実装したら良いものか非常に頭を悩ませています。。

Python

1import cv2 2import Numpy 3img1 = cv2.imread(“img1.jpg”) 4img2 = cv2.imread(“img2.jpg”) 5img_diff = cv2.absdiff(img1, img2) 6img3 = cv2.applyColorMap(img_diff, cv2.COLORMAP_JET) 7cv2.imwrite(“img3”, img3)
Jimmy_M06👍を押しています

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

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

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

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

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

guest

回答2

0

恐らく「関数名と使い方が分からなくて困っているんだよなぁ、参考になる情報があればできそうなんだけど」というものと思います。

ほとんどの計算がOpenCV(画像処理ライブラリ)やNumpy(数値計算ライブラリ)でできそうです。
使えそうな関数名を上げます。続きはご自身で検索された方が手っ取り早いと思います。

teratailの方針にそぐわないと思いますのでいきなり動くコードは載せませんが、くっつけていけば動くであろう順番と関数を上げていきます。

1. 画像を2枚読み込む
img = cv2.imread("アドレス")

2. 2枚の画像を”色”で比較する
(オプション) 必要であれば色空間を変換します。引数を変えればグレースケールにも変換できます。
img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

続いて、グレースケールで比較する必要があるので、カラー画像をグレースケールにします。
a, b, c = cv2.Split(img)

3. 比較した結果を保存
cv2.imwrite("アドレス", img)
※上記分割したイメージは必要に応じてcv2.merge((a ,b ,c ))で結合できます。

3. 3のデータをもとに色に差が無いならグレー、差が小さければ水色、差が大きくなるにつれ赤色で表示
まず差を調べます。
img = cv2.absdiff(img1,img2)
どれだけ差があるかを絶対値で返す関数です。差が無ければ0、0と255での比較であれば255といった具合です。

色味をつけるのは、以下の関数で行けますね。
img = cv2.applyColorMap(img,cv2.COLORMAP_JET)
Matplotlibでも行けると思いますが、Matplotlibではグラフにして出し入れする都合でOpenCVでやったほうが早そうな気がします。色味は引数の指定で変更できます。


解決出来たら解決できたコードをUPしてくださると今後困った人が助かります。

投稿2019/10/06 00:02

編集2019/10/06 00:03
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

近いことをやっているものとしては下記が参考になるのではないでしょうか。
画像を比較して異なる部分を表示

投稿2019/10/05 22:48

gnbrganchan

総合スコア438

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問