直方圖比較

目錄

1、直方圖比較的概念

2、直方圖比較的主要原因

3、典型應用場景

4、基礎直方圖比較

5、多通道直方圖比較

6、實時直方圖檢測

1、直方圖比較的概念

? ? ? ?直方圖比較是通過數學方法計算兩個直方圖之間的相似度或差異度的技術。在計算機視覺中,直方圖是對圖像特征(如顏色、梯度方向等)的統計分布表示,比較兩個直方圖的相似性可以反映圖像內容的相似程度。

2、直方圖比較的主要原因

1. 圖像相似性判斷 通過比較顏色/紋理直方圖,可以快速判斷兩張圖片的內容相似性,常用于:
? ?圖像檢索
? ?重復圖片檢測
? ?視頻關鍵幀提取
2. 目標識別與匹配 當物體的顏色分布具有特征性時(如紅色消防車),直方圖比較能輔助識別。
3. 變化檢測 監控場景中比較前后幀直方圖差異。
4. 顏色校正驗證 在圖像處理流水線中,通過比較輸入輸出圖像的直方圖差異來驗證處理效果。


3、典型應用場景

醫學影像 :比較病灶區域與正常組織的灰度分布
工業檢測 :檢測產品顏色是否符合標準(如油漆顏色一致性)
自動駕駛 :通過路標顏色直方圖識別交通標志
直方圖比較的優勢在于計算高效(不受旋轉/輕微形變影響),但需注意它缺乏空間信息,常與其他特征結合使用。

4、基礎直方圖比較

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {// 讀取兩張對比圖像Mat img1 = imread("image1.jpg");Mat img2 = imread("image2.jpg");if(img1.empty() || img2.empty()) return -1;// 轉換為HSV色彩空間(比較顏色直方圖更有效)Mat hsv1, hsv2;cvtColor(img1, hsv1, COLOR_BGR2HSV);cvtColor(img2, hsv2, COLOR_BGR2HSV);// 設置直方圖參數int h_bins = 50, s_bins = 60;int histSize[] = {h_bins, s_bins};float h_range[] = {0, 180};float s_range[] = {0, 256};const float* ranges[] = {h_range, s_range};int channels[] = {0, 1}; // 使用H和S通道// 計算直方圖Mat hist1, hist2;calcHist(&hsv1, 1, channels, Mat(), hist1, 2, histSize, ranges, true, false);calcHist(&hsv2, 1, channels, Mat(), hist2, 2, histSize, ranges, true, false);// 歸一化直方圖normalize(hist1, hist1, 0, 1, NORM_MINMAX, -1, Mat());normalize(hist2, hist2, 0, 1, NORM_MINMAX, -1, Mat());// 比較直方圖(四種方法)double compare_methods[4];compare_methods[0] = compareHist(hist1, hist2, HISTCMP_CORREL);compare_methods[1] = compareHist(hist1, hist2, HISTCMP_CHISQR);compare_methods[2] = compareHist(hist1, hist2, HISTCMP_INTERSECT);compare_methods[3] = compareHist(hist1, hist2, HISTCMP_BHATTACHARYYA);// 輸出比較結果cout << "相關性比較 [越接近1越相似]: " << compare_methods[0] << endl;cout << "卡方比較 [越接近0越相似]: " << compare_methods[1] << endl;cout << "直方圖交集 [越大越相似]: " << compare_methods[2] << endl;cout << "巴氏距離 [越接近0越相似]: " << compare_methods[3] << endl;return 0;
}

比較算法說明

OpenCV提供四種直方圖比較方法:

相關性比較

HISTCMP_CORREL

值范圍[-1,1],1表示完全匹配

卡方檢驗

HISTCMP_CHISQR

值范圍[0,∞),0表示完全匹配

直方圖相交

HISTCMP_INTERSECT

值越大相似度越高

巴氏距離

HISTCMP_BHATTACHARYYA

值范圍[0,1],0表示完全匹配

5、多通道直方圖比較

// ... 圖像讀取和轉換代碼同上 ...// 擴展為3通道直方圖(H,S,V)
int channels[] = {0, 1, 2};
int histSize[] = {30, 32, 32}; // HS通道精度更高
float h_range[] = {0, 180};
float s_range[] = {0, 256};
float v_range[] = {0, 256};
const float* ranges[] = {h_range, s_range, v_range};// 計算直方圖
calcHist(&hsv1, 1, channels, Mat(), hist1, 3, histSize, ranges, true, false);
calcHist(&hsv2, 1, channels, Mat(), hist2, 3, histSize, ranges, true, false);// 添加EMD(Earth Mover's Distance)比較
Mat sig1, sig2;
// 將直方圖轉換為特征向量格式
// ... (需要實現直方圖到特征向量的轉換) ...double emd = EMD(sig1, sig2, DIST_L2);
cout << "推土機距離: " << emd << endl;

6、實時直方圖檢測

VideoCapture cap(0);
Mat frame, last_frame;
bool first_frame = true;while(true) {cap >> frame;if(frame.empty()) break;Mat hsv;cvtColor(frame, hsv, COLOR_BGR2HSV);// 計算當前幀直方圖Mat current_hist;calcHist(&hsv, 1, channels, Mat(), current_hist, 2, histSize, ranges);normalize(current_hist, current_hist, 0, 1, NORM_MINMAX);if(!first_frame) {double similarity = compareHist(last_hist, current_hist, HISTCMP_CORREL);putText(frame, format("相似度: %.2f", similarity), Point(20,50), FONT_HERSHEY_SIMPLEX, 1, Scalar(0,255,0), 2);}first_frame = false;current_hist.copyTo(last_hist);imshow("Live", frame);if(waitKey(30) >= 0) break;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79545.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79545.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79545.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows11 VS code 安裝 Cline 調用 Github MCP 配置過程坑點匯總

背景 為了調研 MCP 在 windows 上如何使用本地的命令執行一些操作而實現自動化的過程&#xff0c;在 B 站視頻的指導下&#xff0c;進行相應填坑過程&#xff0c;最終運行起來&#xff0c;并實現 github 自動化編程并提交代碼的過程。 B 站 Cline 視頻演示 Cline Cline 是一…

kdump詳解

kdump 是 Linux 系統中的一種內核崩潰轉儲機制&#xff0c;用于在系統崩潰時將內存中的數據保存到磁盤上&#xff0c;以便后續分析系統崩潰的原因。以下是對 kdump 的詳細介紹&#xff1a; 1、工作原理 kdump 利用了 Linux 系統中的雙啟動機制。當系統啟動時&#xff0c;它會…

RGB三原色

本文來源 &#xff1a; 騰訊元寶 ??RGB三原色&#xff08;紅綠藍&#xff09;詳解?? RGB&#xff08;Red, Green, Blue&#xff09;是光學的三原色&#xff0c;通過不同比例的混合可以產生人眼可見的絕大多數顏色。它是現代顯示技術&#xff08;如屏幕、投影儀&#xff09…

CSS兼容性:挑戰與策略

CSS兼容性&#xff1a;挑戰與策略 引言 在前端開發的廣闊領域中&#xff0c;跨瀏覽器兼容性無疑是最棘手且難以預測的挑戰之一。當我們精心設計的網頁在Chrome中完美呈現&#xff0c;卻在Safari中布局崩潰&#xff0c;或在Firefox中交互失效時&#xff0c;這種挫折感是每位前…

[ 設計模式 ] | 單例模式

單例模式是什么&#xff1f;哪兩種模式&#xff1f; 單例模式就是一個類型的對象&#xff0c;只有一個&#xff0c;比如說搜索引擎中的索引部分&#xff0c;360安全衛士的桌面懸浮球。 餓漢模式和懶漢模式&#xff1a;餓漢模式是線程安全的&#xff0c;懶漢模式不是線程安全的…

Notebook.ai 開源程序是一套工具,供作家、游戲設計師和角色扮演者創建宏偉的宇宙 - 以及其中的一切

?一、軟件介紹 文末提供程序和源碼下載 Notebook.ai 開源程序是一套工具&#xff0c;供作家、游戲設計師和角色扮演者創建宏偉的宇宙 - 以及其中的一切。 二、軟件特點 Notebook 是作家的規劃工具&#xff0c;用于創建從宇宙到角色、情節到單個項目的任何內容。通過瀏覽器、…

centos7.0無法安裝php8.2/8.3

在centos安裝php8.2報錯 configure: error: *** A compiler with support for C17 language features is required. 配置過程檢測到你的系統編譯器不支持 C17 語言特性&#xff0c;而 PHP 8.2 的編譯需要編譯器支持 C17 sudo yum update -y sudo yum install centos-releas…

Three.js + React 實戰系列 - 客戶評價區細解教程 Clients 組件?(回答式評價 + 評分星級)

對個人主頁設計和實現感興趣的朋友可以訂閱我的專欄哦&#xff01;&#xff01;謝謝大家&#xff01;&#xff01;&#xff01; 在這篇博客中&#xff0c;我們將實現一個簡潔的 Hear from My Clients 客戶評價區域。這個區塊在個人主頁中可以突顯用戶體驗和專業度&#xff0c;幫…

Vim 命令從頭學習記錄

學習鏈接&#xff1a;eleon-vim基礎教程 Vim - 基礎翻屏操作 光標移動&#xff1a;hjkl 20j 向下移動20行&#xff0c;w 向后移動一個字符&#xff0c;b 向前移動一個字符。 Ctrl u 向上翻半頁 UP Ctrl d 向下翻半頁 Down Ctrl f 向下翻整頁 Forward Ctrl b 向上翻整頁 …

Linux系統編程--基礎指令(!!詳細講解+知識拓展)

第一講 基礎指令 ? 我們現如今自己使用的電腦大部分是用的都是windows或者macOS&#xff0c;并配合上由微軟和蘋果開發的圖形化界面&#xff0c;所以使用鼠標再屏幕上進行點擊即可完成許多任務。但是作為操作系統的學習者&#xff0c;在linux的基礎上不再使用圖形化界進行操作…

ADK 第四篇 Runner 執行器

智能體執行器 Runner&#xff0c;負責完成一次用戶需求的響應&#xff0c;是ADK中真正讓Agent運行起來的引擎&#xff0c;其核心功能和Agents SDK中的Runner類似&#xff0c;具體作用如下&#xff1a; 會話管理&#xff1a;自動讀取/寫入 SessionService&#xff0c;維護歷史信…

【Tauri2】37——后端處理invoke

目錄 前言 正文 隨便看看 看看get 看看parse_invoke_request 看看message_handler 看看handle_ipc_message 看看webview的on_message方法 第一種情況的處理 第二種情況的處理 運行通信函數 返回的處理 整個流程 前言 【Tauri2】033 __TAURI_INTERNALS__和invoke-C…

kotlin 05flow -從 LiveData 遷移到 Kotlin Flow 完整教程

一 從 LiveData 遷移到 Kotlin Flow 完整教程 LiveData 長期以來是 Android 架構組件中狀態管理的核心&#xff0c;但隨著 Kotlin Flow 的成熟&#xff0c;Google 官方推薦將現有 LiveData 遷移到 Flow。本教程基于官方文章并擴展實踐細節&#xff0c;完成平滑遷移。 一、為什…

C++負載均衡遠程調用學習之獲取主機信息功能

目錄 01Lars-lbAgentV0.2-賦值均衡數據結構關系分析 02 Lars-lbAgent0.2-host_info-load_balance-route_lb數據結構的定義 03Lars-lbAgentV0.2-proto協議的定義 04 Lars-lbAgentV0.2-route_lb與UDP server的關聯 05 -Lars-lbAgentV0.2-route_lb與UDP server的關聯 06Lars…

2025系統架構師---論軟件的設計模式論文

2023 年,我所在的公司承擔了某部網絡靶場的研發任務。我作為公司的技 術總監,希望能打造基于網絡靶場的系列產品,參與到項目的設計中,以期開發 擴展性和可維護性良好的網絡靶場,為以后的產品開發打下基礎。網絡靶場是網 絡安全技術研究的基礎支撐平臺,它利用虛擬的和實物…

Kubernetes排錯(七)-節點排錯

1、節點 Crash 與 Vmcore 分析 kdump 介紹? 目前大多 Linux 發新版都會默認開啟 kdump 服務&#xff0c;以方便在內核崩潰的時候, 可以通過 kdump 服務提供的 kexec 機制快速的啟用保留在內存中的第二個內核來收集并轉儲內核崩潰的日志信息(vmcore 等文件), 這種機制需要服務…

【QT】QT中的軟鍵盤設計

QT的軟鍵盤設計 1.軟鍵盤制作步驟2.介紹有關函數的使用3.出現的編譯錯誤及解決辦法示例代碼1&#xff1a;按鍵事件實現軟鍵盤現象&#xff1a;示例代碼2&#xff1a;按鍵事件實現軟鍵盤&#xff08;加特殊按鍵&#xff09;現象&#xff1a; 軟鍵盤移植到新的工程的步驟&#xf…

【LaTeX+VSCode本地Win11編譯教程】

LaTeXVSCode本地編譯教程參考視頻&#xff1a; LaTeXVSCode本地編譯教程 下面提供一種Win11的Latex環境配置和設置方案&#xff0c;首先vscode安裝參考博客&#xff1a;【VscodeGit教程】&#xff0c;然后準備安裝Latex相關組件 在 https://miktex.org/download 下載 miktex 并…

2025五一杯數學建模ABC題賽題已出

2025五一杯數學建模ABC題賽題已出 A: B: C:

Springclound常用五大組件及其使用原理

注冊中心Eureka Eureka-Server&#xff1a;就是服務注冊中心&#xff08;可以是一個集群&#xff09;&#xff0c;對外暴露自己的地址。 提供者&#xff1a;啟動后向Eureka注冊自己信息&#xff08;地址&#xff0c;服務名稱等&#xff09;&#xff0c;并且定期進行服務續約 …