图像相似度计算之直方图方法OpenCV实现
生活随笔
收集整理的這篇文章主要介紹了
图像相似度计算之直方图方法OpenCV实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
操作步驟:
1.??????載入圖像(灰度圖或者彩色圖),并使其大小一致;
2.??????若為彩色圖,增進行顏色空間變換,從RGB轉換到HSV,若為灰度圖則無需變換;
3.??????若為灰度圖,直接計算其直方圖,并進行直方圖歸一化;
4.??????若為彩色圖,則計算其彩色直方圖,并進行彩色直方圖歸一化;
5.??????使用相似度公式,如相關系數、卡方、相交或巴氏距離,計算出相似度值。
string strSrcImageName = "src.jpg";cv::Mat matSrc, matSrc1, matSrc2;matSrc = cv::imread(strSrcImageName, CV_LOAD_IMAGE_UNCHANGED);cv::resize(matSrc, matSrc1, cv::Size(357, 419), 0, 0, cv::INTER_NEAREST);cv::resize(matSrc, matSrc2, cv::Size(2177, 3233), 0, 0, cv::INTER_LANCZOS4);cv::Mat matDst1, matDst2;cv::Size sizeImage = cv::Size(500, 500); cv::resize(matSrc1, matDst1, sizeImage, 0, 0, cv::INTER_CUBIC);//cv::flip(matDst1, matDst1, 1);cv::resize(matSrc2, matDst2, sizeImage, 0, 0, cv::INTER_CUBIC);if (matSrc.channels() == 1) {int histSize = 256;float range[] = {0, 256};const float* histRange = {range};bool uniform = true;bool accumulate = false;cv::Mat hist1, hist2;cv::calcHist(&matDst1, 1, 0, cv::Mat(), hist1, 1, &histSize, &histRange, uniform, accumulate);cv::normalize(hist1, hist1, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());cv::calcHist(&matDst2, 1, 0, cv::Mat(), hist2, 1, &histSize, &histRange, uniform, accumulate);cv::normalize(hist2, hist2, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());double dSimilarity = cv::compareHist(hist1, hist2, CV_COMP_CORREL);//,CV_COMP_CHISQR,CV_COMP_INTERSECT,CV_COMP_BHATTACHARYYAcout<<"similarity = "<<dSimilarity<<endl;} else {cv::cvtColor(matDst1, matDst1, cv::COLOR_BGR2HSV);cv::cvtColor(matDst2, matDst2, cv::COLOR_BGR2HSV);int h_bins = 50, s_bins = 60;int histSize[] = {h_bins, s_bins};float h_ranges[] = {0, 180};float s_ranges[] = {0, 256};const float* ranges[] = {h_ranges, s_ranges};int channels[] = {0, 1};cv::MatND hist1, hist2;cv::calcHist(&matDst1, 1, channels, cv::Mat(), hist1, 2, histSize, ranges, true, false);cv::normalize(hist1, hist1, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());cv::calcHist(&matDst2, 1, channels, cv::Mat(), hist2, 2, histSize, ranges, true, false);cv::normalize(hist2, hist2, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());double dSimilarity = cv::compareHist(hist1, hist2, CV_COMP_CORREL);cout<<"similarity = "<<dSimilarity<<endl;}
總結
以上是生活随笔為你收集整理的图像相似度计算之直方图方法OpenCV实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git简介以及与SVN的区别
- 下一篇: 对称加密算法之DES介绍