日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

《OpenCV3编程入门》学习笔记9 直方图与匹配(三)直方图对比

發布時間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《OpenCV3编程入门》学习笔记9 直方图与匹配(三)直方图对比 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

9.3 直方圖對比

9.3.1 對比直方圖:compareHist()函數

1.作用:
??比較兩幅直方圖
2.函數原型:

(1)double compareHist(InputArray H1,InputArray H2, int method)
(2)double compareHist(const SpareMat& H1, const SpareMat& H2, int method)

3.參數說明:
(1)直方圖1
(2)直方圖2
(3)距離標準,4種,其中Correlation和Intersection標準值越大表示相似度越高:
??1)相關,Correlation(method=CV_COMP_CORREL)
?????????????
????其中:
????????????????????
????N等于直方圖中bin的個數
??2)卡方,Chi-Square(method=CV_COMP_CHISQR)
?????????????????
??3)直方圖相交,Intersection(method-CV_COMP_INTERSECT)
??4)Bhattacharyya距離,(method=CV_COMP_BHATTACHARYYA)
????Bhattacaryya距離與Hellinger距離相關,也可寫作method=CV_COMP_HELLINGER
??????????????

9.3.2 示例程序

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;int main()
{//【1】聲明儲存基準圖像和另外兩張對比圖象的矩陣(RGB和HSV)Mat srcImage_base, hsvImage_base;Mat srcImage_test1, hsvImage_test1;Mat srcImage_test2, hsvImage_test2;Mat hsvImage_halfDown;//【2】載入基準圖像和兩張測試圖像并顯示srcImage_base = imread("1.jpg", 1);srcImage_test1 = imread("2.jpg", 1);srcImage_test2 = imread("3.jpg", 1);imshow("基準圖像", srcImage_base);imshow("測試圖像1", srcImage_test1);imshow("測試圖像2", srcImage_test2);//【3】將圖像由BGR色彩空間轉換到HSV色彩空間cvtColor(srcImage_base, hsvImage_base, COLOR_RGB2HSV);cvtColor(srcImage_test1, hsvImage_test1, COLOR_RGB2HSV);cvtColor(srcImage_test2, hsvImage_test2, COLOR_RGB2HSV);//【4】創建包含基準圖像下半部的半身圖像(HSV格式)hsvImage_halfDown = hsvImage_base(Range(hsvImage_base.rows / 2, hsvImage_base.rows - 1), Range(0, hsvImage_base.cols - 1));//【5】初始化計算直方圖需要的實參//對hue通道使用30個bin,對saturation通道使用32個binint h_bins = 50;int s_bins = 60;int histSize[] = { h_bins,s_bins };//hue取值范圍0-256,saturation取值范圍0-180float h_ranges[] = { 0,256 };float s_ranges[] = { 0,180 };const float* ranges[] = { h_ranges,s_ranges };//使用第0和1通道int channels[] = { 0,1 };//【6】創建存儲直方圖的MatND類實例MatND baseHist, testHist1, testHist2, halfDownHist;//【7】計算基準圖像,兩張測試圖像,半身基準圖像的HSV直方圖calcHist(&hsvImage_base, 1, channels, Mat(), baseHist, 2, histSize, ranges, true, false);normalize(baseHist, baseHist, 0, 1, NORM_MINMAX, -1, Mat());calcHist(&hsvImage_test1, 1, channels, Mat(), testHist1, 2, histSize, ranges, true, false);normalize(testHist1, testHist1, 0, 1, NORM_MINMAX, -1, Mat());calcHist(&hsvImage_test2, 1, channels, Mat(), testHist2, 2, histSize, ranges, true, false);normalize(testHist2, testHist2, 0, 1, NORM_MINMAX, -1, Mat());calcHist(&hsvImage_halfDown, 1, channels, Mat(), halfDownHist, 2, histSize, ranges, true, false);normalize(halfDownHist, halfDownHist, 0, 1, NORM_MINMAX, -1, Mat());//【8】按順序使用4種對比標準將基準圖像的直方圖與其余各直方圖進行對比for (int i = 0; i < 4; i++){//進行圖像直方圖的對比int compare_method = i;double base_base = compareHist(baseHist, baseHist, compare_method);double base_test1 = compareHist(baseHist, testHist1, compare_method);double base_test2 = compareHist(baseHist, testHist2, compare_method);double base_half = compareHist(baseHist, halfDownHist, compare_method);//輸出結果printf("方法[%d]的匹配結果如下:\n\n【基準圖-基準圖】:%f,【基準圖-測試圖1】:%f,【基準圖-測試圖2】:%f,【基準圖-半身圖】:%f\n", i, base_base, base_test1, base_test2, base_half);printf("----------------------------------------------------------------------------------------------------------------------------------\n");}printf("檢測結束\n");waitKey(0);return 0;
}

運行效果:

?????
????????????
????????????
????????????

總結

以上是生活随笔為你收集整理的《OpenCV3编程入门》学习笔记9 直方图与匹配(三)直方图对比的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。