dポイントプレゼントキャンペーン実施中!

2枚の画像データ(白黒2値画像、ファイル形式は何でもよい、サイズ同じ)を読み込みピクセル単位で比較して、それらの画像がどのくらい一致しているかを数値で判断するサンプルコードをC言語でどなたか教えてください。お願いします。

例えば、次のような2枚の画像があったとします。
画像A       画像B
■□■□■□   □■□■□■
□■□■□■   ■□■□■□
■□■□■□   □■□■□■
□■□■□■   ■□■□■□
実行結果「画像Aと画像Bは0%一致しています。」

A 回答 (4件)

 DIBの場合ですが、既出の通りで、1バイト当たりに8ピクセル分のデータを詰め込んでいる上(1バイト8ビット前提のお話)、折り返す1ライン辺りが4の倍数でなければならないなど、一見単純に見えて、結構面倒だったりもします。


 恐らく以下で計算出来た筈です。

static LONG CalcScanLineByte(const LONG w, const WORD bpp)
{
return (((bpp * w) + 31) / 32) * 4;
}

//横幅1ピクセル、1ビット(モノクロ)イメージのスキャンバイト数
int scanLine = CalcScanLineByte(1, 1);
    • good
    • 0

>実行結果「画像Aと画像Bは0%一致しています。



 なんか違うような・・。
 実際に、添付に示すとおり、質問者様の画像Aと画像Bを作ってみました。

 ・ちょっと見、「画像Aと画像Bは、100%一致しています。」といいたくなります。

>ピクセル単位で比較して、それらの画像がどのくらい一致しているかを数値で判断すると・・

 画像Aは、画像Bと 0%一致しています、となり、
 画像Aは、画像Cと50%一致しています、となります。

↑このことを「判断するサンプルコードをC言語でどなたか教えてください」でよいのなら、

 (BMPの例ですが・・)
 http://www14.big.or.jp/~ken1/tech/tech12.html

 を参考にしてください。
 なお、16と256色での説明ですが、「白黒2値画像」の場合は、データ8ビットがそのまま8ピクセルに対応します。
 バイナリモードで読み込んで、ビット単位で比較するだけかと・・。

添付図のように、「判断する」ことにあまり意味があるとは思えませんが、
プログラムを勉強する上では、よろしいかと・・。
「2値画像の一致度判定プログラム教えてくだ」の回答画像3
    • good
    • 0

画像AとBを先頭ピクセルから比較していって合計を画像サイズで割ればいいんでは?


int sum=0;
for(int y=0;y<image_height;y++){
for(int x=0;x<image_height;x++){
if (imageA[x][y]==imageB[x][y])sum++;
}
}
int anser = sum/image_size;
こんな感じ
    • good
    • 1

なぜそんなモノを知りたいのですか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!