opencv24-直方图比较

此方法比较准确 

还行

 此方法不怎么行

此方法比较准确 

#include<opencv2\highgui\highgui.hpp>
#include<opencv2\opencv.hpp>
#include<iostream>
#include<math.h>
using namespace std;
using namespace cv;
string convertToString(double d);
int main()
{Mat base, test1, test2;Mat hsvbase, hsvtest1, hsvtest2;base = imread("E:\\vs2015\\opencvstudy\\24police2.png");if (base.empty()){cout << "could not load the src image!" << endl;return -1;}test1 = imread("E:\\vs2015\\opencvstudy\\24police3.png");test2 = imread("E:\\vs2015\\opencvstudy\\24police4.png");cvtColor(base, hsvbase, CV_BGR2HSV);cvtColor(test1, hsvtest1, CV_BGR2HSV);cvtColor(test2, hsvtest2, CV_BGR2HSV);int h_bins = 50;int s_bins = 50;int histSize[] = { h_bins,s_bins };//hue varies from 0 to 179,saturation from 0 to 255float h_ranges[] = { 0,180 };float s_ranges[] = { 0,256 };const float* range[] = { h_ranges,s_ranges };//Use the 0-th or 1-st channelsint channels[] = { 0,1 };MatND hist_base;  //MatND表示多通道MatND hist_test1;MatND hist_test2;calcHist(&hsvbase,1, channels, Mat(), hist_base,2, histSize, range, true, false);normalize(hist_base, hist_base, 0, 1, NORM_MINMAX, -1, Mat());  //Mat() 代表mask为空calcHist(&hsvtest1, 1, channels, Mat(), hist_test1, 2, histSize, range, true, false);normalize(hist_test1, hist_test1, 0, 1, NORM_MINMAX, -1, Mat());  //Mat() 代表mask为空calcHist(&hsvtest2, 1, channels, Mat(), hist_test2, 2, histSize, range, true, false);normalize(hist_test2, hist_test2, 0, 1, NORM_MINMAX, -1, Mat());  //Mat() 代表mask为空double basebase = compareHist(hist_base, hist_base, CV_COMP_CORREL);double basetest1 = compareHist(hist_base, hist_test1, CV_COMP_CORREL);double basetest2 = compareHist(hist_base, hist_test1, CV_COMP_CORREL);double test1test2 = compareHist(hist_test1, hist_test2, CV_COMP_CORREL);Mat test12;test2.copyTo(test12);putText(base, convertToString(basebase), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);putText(test1, convertToString(basetest1), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);putText(test2, convertToString(basetest2), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);putText(test12, convertToString(basebase), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);imshow("base", base);imshow("test1", test1);imshow("test2", test2);imshow("test12", test12);waitKey();return 0;
}string convertToString(double d)
{ostringstream os;if (os << d){return os.str();}return "invalid conversion";
}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抓包工具Stream之接口调试和加密解码(二)

移动端iphone抓包调试神器—Stream安装和使用&#xff08;一&#xff09;之前我们介绍了Stream工具的安装和使用&#xff0c;今天我们再来介绍下抓包请求筛选、接口详情、接口导出、接口调试、接口测试、编码解码加密等1、抓包完成&#xff0c;停止抓包&#xff0c;进入最新抓包…

白盒测试 | 用例设计方法之条件覆盖

条件覆盖&#xff0c;程序各判定中的每个条件获得各种可能的取值至少满足一次即可&#xff0c;不考虑路径的覆盖。上图中有两个判定表达式&#xff0c;每个判定表达式中有两个条件&#xff0c;为了做到条件覆盖&#xff0c;第一个判断的所有条件的可能取值情况是A>1或A≤1&a…

白盒测试 | 用例设计方法之判定覆盖

判定覆盖也被成为分支覆盖(Branch Coverage)是设计足够多的测试用例&#xff0c;使得程序中的每一个判断至少获得一次“真”和一次“假”&#xff0c;即使得程序流程图中的每一个真假分支至少被执行一次。使设计的测试用例保证程序中每个判断的每个取值分支&#xff08;ture or…

白盒测试 | 用例设计方法之语句覆盖

语句覆盖&#xff0c;顾名思义就是针对代码语句的嘛。它的含义是我们设计出来的测试用例要保证程序中的每一个语句至少被执行一次。通常语句覆盖被认为是“最弱的覆盖”&#xff0c;原因是它仅仅考虑对代码中的执行语句进行覆盖而没有考虑各种条件和分支&#xff0c;因此在实际…

一套完整的Selenium自动化测试框架设计实战,这次38K, 妥了

金九银十&#xff0c;大家都铆足干劲想抓住机会涨薪进大厂。结合这几年的行业趋势&#xff0c;想要挑战大厂面试&#xff0c;首先必须吃透Selenium自动化测试框架设计。这里说一下原因&#xff1a;首先&#xff0c;一线互联网大厂无一例外&#xff0c;全都要求测试人掌握Seleni…

4天搞定Docker和k8s核心架构,稳拿35k不是问题?

随着云原生时代的到来&#xff0c;各大厂纷纷上云&#xff0c;甚至有人说&#xff0c;未来的软件就是生在云上&#xff0c;长在云上的。在这种云原生时代大势下&#xff0c;衍生出来的 Kubernetes 工程师、云原生工程师的薪资也水涨船高&#xff0c;大厂不惜花重金聘请优秀的云…

1元解锁 | Python万能代码模板 |10大必学实用技巧

内容摘要你要悄悄学 Python&#xff0c;然后惊艳所有人。一听到 Python 或编程语言&#xff0c;你可能条件反射会觉得“很难”。但今天的 Python 课程是个例外&#xff0c;不需要你懂计算机原理&#xff0c;也不需要理解复杂的编程模式&#xff0c;只需替换成你想要的网页链接、…

C++ 递归函数返回值理解

首先看代码&#xff1a; #include <iostream> using namespace std; int main() {int digui(int i);int i;cin>>i;i digui(i);cout << "main函数最后结果&#xff1a;"<<i<<endl; } int digui(int i) {int j 0;if (i 0)return 1;j…

二叉树---树的深度递归理解

int Dep(Bianary *root) {if (root NULL){return 0;}int depth 0;int leftD Dep(root->lchild);int rightD Dep(root->rchild);depth leftD > rightD ? leftD 1 : rightD 1;return depth; } 递归理解&#xff1a; depth的值与是否初始化无关&#xff0c;因为…

升级锦囊 | 测试开发核心技术46讲

课程背景我是思寒&#xff0c;在测试圈里摸爬滚打了十年有余。我从外包功能测试做起&#xff0c;后进入阿里、百度等公司做了测试开发工程师、测试架构师。我发现几乎每个测试工程师都和我一样&#xff0c;职业理想都是从事测试开发的工作。尤其是近几年来&#xff0c;互联网的…

血的案例告诫 | 模拟大批量数据测试边界上限

Fiddler响应拦截数据篡改&#xff0c;实现特殊场景深度测试&#xff08;一&#xff09;利用Fiddler抓包调试工具&#xff0c;实现mock数据特殊场景深度测试&#xff08;二&#xff09;利用Fiddler抓包调试工具&#xff0c;实现神奇特殊场景深度测试&#xff08;三&#xff09;F…

Monkey稳定性测试初探(二)

记得 关注转发~~~之前写过一篇关于稳定性测试的文章&#xff1a;Monkey随机性能压测初探&#xff08;一&#xff09;01什么是稳定性测试稳定性测试&#xff0c;是在一定压力的情况下&#xff0c;对系统或某个模块持续进行长时间的操作&#xff08;一般遵循7*24小时原则&#xf…

Fiddler抓包 | 竟然有这些骚操作,太神奇了?

一、双击Session时&#xff0c;使请求页始终显示到“webform”tab页&#xff0c;使响应页始终显示到”json”tab页在QUICK EXEC命令执行窗口&#xff0c;执行&#xff1a;PREFS SET fiddler.ui.inspectors.request.alwaysuse "WebForms"PREFS SET fiddler.ui.inspect…

pycharm连接sqlite

进行创建上了一个Django项目之后&#xff0c;进行点击 菜单中的view 菜单。 进行点击了view菜单之后&#xff0c;进行点击下拉菜单选中为tool windows的选项。 弹出了下拉下一级菜单选中为 database 的选项。 弹出了database的选项之后&#xff0c;进行点击 添加 按钮。 弹出了…

抓包工具mitmproxy | mitmweb基本用法(二)

上一篇&#xff1a;我们分享了抓包工具mitmproxy环境配置使用&#xff08;一&#xff09;这一篇我们主要介绍下mitmweb抓包工具的基本用法一、mitmproxy介绍mitmproxy是Python编写的一款功能完善的代理工具&#xff0c;mitmproxy是一款支持拦截HTTP和HTTPS请求和响应并即时修改…

mitmproxy抓包 | Python实时生成接口自动化用例

抓包工具mitmproxy环境配置使用&#xff08;一&#xff09;抓包工具mitmproxy | mitmweb基本用法&#xff08;二&#xff09;前面已经给大家分享了mitmproxy的环境配置和基本使用&#xff0c;文章浏览量很高&#xff0c;相信对抓包工具感兴趣的朋友&#xff0c;已经熟练运用起来…

mitmproxy抓包 | Python实时生成接口自动化用例(三)

抓包工具mitmproxy环境配置使用&#xff08;一&#xff09;抓包工具mitmproxy | mitmweb基本用法&#xff08;二&#xff09;前面已经给大家分享了mitmproxy的环境配置和基本使用&#xff0c;文章浏览量很高&#xff0c;相信对抓包工具感兴趣的朋友&#xff0c;已经熟练运用起来…

To disable deprecation,,use _CRT_SECURE_NO_WARNINGS

解决方法&#xff1a;ok&#xff0c;也就是加入一个_CRT_SECURE_NO_WARNINGS的问题。 转载自https://blog.csdn.net/guoming0000/article/details/8838810 或者在cpp文件最顶端添加&#xff1a;#define _CRT_SECURE_NO_WARNINGS