2016-05-24 4 views
0

画像Aと画像Bを仮定します。ここで、Bは全体的にHSV値が高く彩度の低いAの修正コピーです。 OpenCVを使用してこれらの違いを報告するにはどうすればよいですか?opencvレポート間の色の違い

Ex。出力:色相0、彩度-25、HSV値+25。

私は既にbgr-imagesをhsv-imagesに変換し、3つのチャンネルに分割することができました。 両方の画像の各チャンネルの平均をとって、これらの平均の差を出力するのは良い/正しい考えですか?それとも、opencvの方が既に優れているのでしょうか? ありがとう!

+1

必要はありません..:出力の符号(正または負の変化)は関係ありませんが、画像の平等は、使用されるので、もし0は、非常に異なる画像のための違いを意味します例: 'Mat3b diff; absdiff(A、B、diff);スカラーmean_diff =平均(diff);' will giあなたは別々に3つのチャンネルの平均の違いをあなたに教えてください。 – Miki

+0

私は 'absdiff'がまさにここで使われるべきものなのかどうかはわかりません。あなたはそれをすることによって違いの兆候を失います。たぶん 'Mat diff = A - B;と書くだけで十分です(C++と' CV_8U'行列を使用している場合は、負の値を格納する前にCV_32Fに変換する必要があります) – Sunreef

+0

@Sunreed違いは、あなたは絶対値を使用する必要があります。さもなければ、非常に異なったイメージのために0平均差を得ることができます。 – Miki

答えて

2

コメントはコメントに記載されているので、クレジットはMikiとSunreefに送られます。

マットがCV_8U形式であるときには、例のような結果をしたい場合は、画像間の正常な違いは、(行いますA.convertTo(A, CV_32F))を使用してCV_32Fに変換:

Mat diff = B - A; 
Scalar mean_diff = mean(diff); 

しかし、これはにつながることができますあなたが分割する

Mat3b diff; absdiff(A,B, diff); 
Scalar mean_diff = mean(diff); 
関連する問題