OpenCV顏色矩哈希算法------cv::img_hash::ColorMomentHash

  • 操作系統:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 編程語言:C++11

算法描述

該類實現了顏色矩哈希算法(Color Moment Hash),用于圖像相似性比較。它基于圖像在HSV顏色空間中的顏色矩統計特征來生成哈希值,對顏色分布的變化具有較好的魯棒性。

適用于以下場景:

  • 圖像檢索
  • 圖像去重
  • 水印檢測
  • 色彩變化較大的圖像匹配

公共成員函數

  1. compute(InputArray inputArr, OutputArray outputArr)

計算輸入圖像的顏色矩哈希值。
參數說明:

參數類型描述
inputArrInputArray輸入圖像,必須是三通道彩色圖像 (CV_8UC3)
outputArrOutputArray輸出的哈希值,類型為 CV_64F 的一維 Mat
示例:
Mat hash;
color_moment_hash->compute(image, hash);
  1. compare(const Mat& hashOne, const Mat& hashTwo)

比較兩個哈希值之間的差異,返回歐幾里得距離。
參數說明:

參數類型描述
hashOneconst Mat&第一個哈希值
hashTwoconst Mat&第二個哈希值
返回值:
  • 返回兩個哈希之間的歐幾里得距離。
  • 值越小表示圖像越相似。

示例:

double distance = color_moment_hash->compare(hash1, hash2);
if (distance < threshold) {std::cout << "圖像相似" << std::endl;
}

哈希值格式說明

  • 長度:18 個雙精度浮點數(共 144 bits)
  • 數據內容:
    • 每個像素轉換為 HSV 顏色空間
    • 對 Hue、Saturation、Value 三個通道分別計算前 3 階顏色矩(均值、標準差、偏度)
    • 總共 3 通道 × 3 矩 = 9 個特征,每個特征用 2 個 double 表示(共 18 個)

示例代碼

#include <iostream>
#include <opencv2/img_hash.hpp>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace cv::img_hash;
using namespace std;int main()
{// 加載圖像(僅支持彩色圖)Mat img1 = imread( "/media/dingxin/data/study/OpenCV/sources/images/img1.jpg", IMREAD_COLOR );Mat img2 = imread( "/media/dingxin/data/study/OpenCV/sources/images/img2.jpg", IMREAD_COLOR );if ( img1.empty() || img2.empty() ){cerr << "無法加載圖像!" << endl;return -1;}// 創建 ColorMomentHash 對象Ptr< ColorMomentHash > color_moment_hash = ColorMomentHash::create();// 計算哈希值Mat hash1, hash2;color_moment_hash->compute( img1, hash1 );color_moment_hash->compute( img2, hash2 );// 比較哈希值(返回歐幾里得距離)double distance = color_moment_hash->compare( hash1, hash2 );cout << "歐幾里得距離: " << distance << endl;if ( distance < 0.1 ){  // 這里的閾值可以根據實際情況調整cout << "圖像非常相似!" << endl;}else{cout << "圖像不相似。" << endl;}return 0;
}

運行結果

歐幾里得距離: 7.22988
圖像不相似。

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

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

相關文章

上海交大醫學院張維拓老師赴同濟醫院做R語言訓練營培訓

當前&#xff0c;醫學與人工智能的深度融合正迎來歷史性發展機遇。華中科技大學同濟醫學院附屬同濟醫院&#xff08;以下簡稱“同濟醫院”&#xff09;作為醫療人工智能應用的先行探索者&#xff0c;已在電子病歷輔助書寫、科研數據分析、醫療合同自動化審核等關鍵場景完成試點…

使用阿里云/騰訊云安裝完成mysql使用不了

顯示錯誤1130 - Host 106.228.110.117 is not allowed to connect to this MySQL server解決方案進入服務器的mysql命令行mysql -u root -p查看數據庫SHOW DATABASES;選擇mysql數據庫USE mysql;查看里面的表SHOW TABLES;查詢user表格的權限限制SELECT Host, User FROM user;將權…

第35周—————糖尿病預測模型優化探索

目錄 目錄 前言 1.檢查GPU 2.查看數據 ?編輯 3.劃分數據集 4.創建模型與編譯訓練 5.編譯及訓練模型 6.結果可視化 7.總結 前言 &#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客 &#x1f356; 原作者&#xff1a;K同學啊 1.檢查GPU import torch.n…

接口(上篇)

接口&#xff08;上篇&#xff09;1.概念2.語法規則3.使用和特性4.實現多接口5.接口間繼承1.概念 接口就是公共的行為規范標準&#xff0c;大家在實現時&#xff0c; 只要符合規范標準&#xff0c;就可以通用。 在Java中&#xff0c;接口可以看成是&#xff1a;多個類的公共規…

UE5 源碼編譯setup.bat報錯

文章目錄編譯報錯改動說明小結更新編譯報錯 改動說明 因為需要整服務器&#xff0c;就編譯源碼&#xff0c;然后就遇到這個&#xff0c;很無語。這個問題一直存在&#xff0c;UE官方也不修復&#xff0c;也算是修復了&#xff0c;只是每次都要去重新下載替換下。也可以去問問d…

Linux下PCIe子系統(二)——PCIe子系統框架詳解

Linux下PCIe子系統&#xff08;二&#xff09;——PCIe子系統框架詳解 1. 概述 PCIe&#xff08;PCI Express&#xff09;子系統是Linux內核中負責管理PCI/PCIe設備的核心組件。它提供了一套完整的框架來發現、配置和管理PCI設備&#xff0c;實現了設備的即插即用和熱插拔功能。…

[特殊字符] LLM(大型語言模型):智能時代的語言引擎與通用推理基座

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 從千億參數到人類認知的AI革命 &#x1f50d; 一、核心定義與核心特征…

18-C#改變形參內容

C#改變形參內容 1.ref 參數 int A100; add1(ref A) public int add1 (ref int x) {x x 10;return x; }2.out 參數 int A100; int B200; int Z; add3(A,B, out Z) public int add3 (int x&#xff0c;int y&#xff0c;int z) {z x y;return z; }

恒盾C#混淆加密大師最新版本1.4.0更新 - 增強各類加密效果, 提升兼容性, 使.NET加密更簡單

C#/.NET作為托管語言, 其編譯生成的EXE/DLL極易被反編譯工具還原源碼。據統計&#xff0c;大量的商業軟件曾遭遇過代碼逆向風險&#xff0c;導致核心算法泄露、授權被跳過. 因此對于C#語言開發的.NET程序來說, 在發布前進行混淆和加密非常有必要. 恒盾C#混淆加密大師作為一款.N…

數學建模:非線性規劃:二次規劃問題

一、定義如果規劃模型的目標函數是決策向量的二次函數&#xff0c;約束條件都是線性的&#xff0c;那么這個模型稱為二次規劃&#xff08;QP&#xff09;模型。二次規劃模型的一般形式為二、性質凸性判定準則二次規劃問題的凸性完全由Hessian矩陣H決定&#xff1a;??嚴格凸QP…

4. 那在詳細說一下 http 2.0 的特點

總結 二進制協議&#xff1a;文本通信改為二進制幀通信&#xff0c;數據可以劃分為更小的幀&#xff0c;便于高效解析和傳輸。多路復用&#xff1a;廢除 pipeline 管道&#xff0c;避免了“隊頭阻塞”問題。允許同一個 TCP 連接同時發送多個請求和協議&#xff0c;提高網絡資源…

Qt中遍歷QMap的多種方法及性能分析

Qt中遍歷QMap的多種方法及性能分析遍歷QMap的方法**1、使用迭代器&#xff08;STL風格&#xff09;****2、使用Java風格迭代器****3、使用C11范圍循環****4、使用鍵值分離遍歷**性能分析使用建議遍歷QMap的方法 1、使用迭代器&#xff08;STL風格&#xff09; QMap<QStrin…

Unity3D物理引擎性能優化策略

前言 在Unity3D中優化物理引擎性能&#xff0c;尤其是處理3D碰撞器與2D碰撞器的映射問題&#xff0c;需要結合系統特性和最佳實踐。以下是關鍵策略和實現方案&#xff1a; 對惹&#xff0c;這里有一個游戲開發交流小組&#xff0c;希望大家可以點擊進來一起交流一下開發經驗呀…

集群與集群應用

負載均衡與高可用綜合實驗一、集群是什么&#xff1f;是有一組獨立的計算機系統構成的一個松耦合的多處理系統&#xff0c;作為一個整體向用戶提供一組網絡資源&#xff0c;這些單個的計算機就是集群的節點。二、集群類型Load Balance cluster&#xff08;負載均衡集群&#xf…

jmm,`as - if - serial` 與 `happens - before` 原則

在Java并發編程中&#xff0c;as - if - serial 與 happens - before 原則是確保程序在多線程環境下正確執行的重要規則&#xff0c;下面為你詳細講解&#xff1a; as - if - serial原則 定義&#xff1a;as - if - serial 原則是指&#xff0c;不管編譯器和處理器如何優化&…

主流大模型Agent框架 AutoGPT詳解

注&#xff1a;此文章內容均節選自充電了么創始人&#xff0c;CEO兼CTO陳敬雷老師的新書《GPT多模態大模型與AI Agent智能體》&#xff08;跟我一起學人工智能&#xff09;【陳敬雷編著】【清華大學出版社】 GPT多模態大模型與AI Agent智能體書籍本章配套視頻課程【陳敬雷】 文…

kotlin學習,val使用get()的問題

疑問&#xff1a;定義val怎么還能使用get()代碼示例&#xff1a;private val nametype:Intget()Business.carInfo?.let{carSc(it)}?:LType.AS回答&#xff1a;Kotlin 允許為屬性定義自定義 getter&#xff0c;每次訪問屬性時會執行該方法疑問&#xff1a;這里引出另一個不解&…

解決el-select數據類型相同但是顯示數字的問題

這個不是我寫的&#xff0c;只是遇到的bug&#xff0c;寫法問題&#xff0c;忽略了值的綁定的問題源代碼bug&#xff1a;<el-selectv-model"schemeInfo.horizon"placeholder"請選擇起報月份"clearablefilterable><el-option v-for"(option,i…

熟練掌握RabbitMQ和Kafka的使用及相關應用場景。異步通知與解耦,流量削峰,配合本地消息表實現事務的最終一致性并解決消息可靠、順序消費和錯誤重試等問題

RabbitMQstock.#.nyse &#xff0c;#匹配多個字符&#xff0c;*匹配一個字符。 Confirm Callback 到達exchange的回調。 Return Callback 到達queue失敗的回調。 Kafka Kafka生產端分區器&#xff1a; 1.直接指定partition 指定0,1。 2.設置hashkey&#xff0c;計算key的hash值…

飛算科技:以原創技術賦能數字轉型

在數字科技迅猛發展的浪潮中&#xff0c;飛算數智科技&#xff08;深圳&#xff09;有限公司&#xff08;簡稱 “飛算科技”&#xff09;作為一家自主創新型的數字科技公司&#xff0c;同時也是國家級高新技術企業&#xff0c;正以扎實的技術實力和豐富的實踐經驗&#xff0c;在…