91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++ OpenCV如何實現直方圖比較

發布時間:2021-11-26 10:04:47 來源:億速云 閱讀:151 作者:小新 欄目:大數據

這篇文章主要介紹C++ OpenCV如何實現直方圖比較,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

直方圖比較

對輸入的兩個圖像計算得到直方圖H1和H2,歸一化到相同的尺度空間,然后可以通過計算H1與H2之間的距離得到兩個直方圖的相似程度進而比較圖像本身的相似程度。

OpenCV 提供了四種比較方法:

Correlation        相關性比較

Chi-Square        卡方比較

Intersection       十字交叉比較

Bhattacharyya   巴氏距離比較

相關API    cv::compareHist

C++ OpenCV如何實現直方圖比較

C++ OpenCV如何實現直方圖比較

代碼

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

/** @函數 main */
int main( int argc, char** argv )
{
  Mat src_base, hsv_base;
  Mat src_test1, hsv_test1;
  Mat src_test2, hsv_test2;
  Mat hsv_half_down;

  /// 裝載三張背景環境不同的圖像
  if( argc < 4 )
    { printf("** Error. Usage: ./compareHist_Demo <image_settings0> <image_setting1> <image_settings2>\n");
      return -1;
    }

  src_base = imread( argv[1], 1 );
  src_test1 = imread( argv[2], 1 );
  src_test2 = imread( argv[3], 1 );

  /// 轉換到 HSV
  cvtColor( src_base, hsv_base, CV_BGR2HSV );
  cvtColor( src_test1, hsv_test1, CV_BGR2HSV );
  cvtColor( src_test2, hsv_test2, CV_BGR2HSV );

  hsv_half_down = hsv_base( Range( hsv_base.rows/2, hsv_base.rows - 1 ), Range( 0, hsv_base.cols - 1 ) );

  /// 對hue通道使用30個bin,對saturatoin通道使用32個bin
  int h_bins = 50; int s_bins = 60;
  int histSize[] = { h_bins, s_bins };

  // hue的取值范圍從0到256, saturation取值范圍從0到180
  float h_ranges[] = { 0, 256 };
  float s_ranges[] = { 0, 180 };

  const float* ranges[] = { h_ranges, s_ranges };

  // 使用第0和第1通道
  int channels[] = { 0, 1 };

  /// 直方圖
  MatND hist_base;
  MatND hist_half_down;
  MatND hist_test1;
  MatND hist_test2;

  /// 計算HSV圖像的直方圖
  calcHist( &hsv_base, 1, channels, Mat(), hist_base, 2, histSize, ranges, true, false );
  normalize( hist_base, hist_base, 0, 1, NORM_MINMAX, -1, Mat() );

  calcHist( &hsv_half_down, 1, channels, Mat(), hist_half_down, 2, histSize, ranges, true, false );
  normalize( hist_half_down, hist_half_down, 0, 1, NORM_MINMAX, -1, Mat() );

  calcHist( &hsv_test1, 1, channels, Mat(), hist_test1, 2, histSize, ranges, true, false );
  normalize( hist_test1, hist_test1, 0, 1, NORM_MINMAX, -1, Mat() );

  calcHist( &hsv_test2, 1, channels, Mat(), hist_test2, 2, histSize, ranges, true, false );
  normalize( hist_test2, hist_test2, 0, 1, NORM_MINMAX, -1, Mat() );

  ///應用不同的直方圖對比方法
  for( int i = 0; i < 4; i++ )
     { int compare_method = i;
       double base_base = compareHist( hist_base, hist_base, compare_method );
       double base_half = compareHist( hist_base, hist_half_down, compare_method );
       double base_test1 = compareHist( hist_base, hist_test1, compare_method );
       double base_test2 = compareHist( hist_base, hist_test2, compare_method );

       printf( " Method [%d] Perfect, Base-Half, Base-Test(1), Base-Test(2) : %f, %f, %f, %f \n", i, base_base, base_half , base_test1, base_test2 );
     }

  printf( "Done \n" );

  return 0;
 }


輸出的結果

C++ OpenCV如何實現直方圖比較

以上是“C++ OpenCV如何實現直方圖比較”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南丰县| 万盛区| 卫辉市| 郁南县| 加查县| 聂拉木县| 揭阳市| 大姚县| 潼南县| 栖霞市| 柏乡县| 商城县| 花莲县| 吴江市| 襄城县| 望谟县| 尉犁县| 铁岭县| 临沂市| 普宁市| 富顺县| 阳新县| 社旗县| 郁南县| 毕节市| 怀安县| 刚察县| 大姚县| 梓潼县| 汤阴县| 海盐县| 天祝| 临朐县| 临桂县| 祁门县| 曲阳县| 赫章县| 三门峡市| 迁安市| 天气| 泗阳县|