旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【OpenCV】 画像の類似度を調べる

OpenCVの復習が必要になったのでメモしておきます。

// 画像を読み込む
Mat source1;
imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source1);
if (source1.empty())
{
    throw runtime_error("Failed to open image");
}
Mat source2;
imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source2);
if (source2.empty())
{
    throw runtime_error("Failed to open image");
}

// 画像のヒストグラムを計算する
int imageCount = 1; // 入力画像の枚数
int channelsToUse[] = { 0 }; // 0番目のチャネルを使う
int dimention = 1; // ヒストグラムの次元数
int binCount = 256; // ヒストグラムのビンの数
int binCounts[] = { binCount };
float range[] = { 0, 256 }; // データの範囲は0~255
const float* histRange[] = { range };
Mat histogram1;
calcHist(&source1, imageCount, channelsToUse, Mat(), histogram1, dimention, binCounts, histRange);
Mat histogram2;
calcHist(&source2, imageCount, channelsToUse, Mat(), histogram2, dimention, binCounts, histRange);

// 類似度を調べる(同じ画像を読み込んだため1が出力される)
double correlation = compareHist(histogram1, histogram2, CV_COMP_CORREL);

さらに進化した画像処理ライブラリの定番 OpenCV 3基本プログラミング

さらに進化した画像処理ライブラリの定番 OpenCV 3基本プログラミング