OpenCV——反向投影(定位模板图像在输入图像中的位置)
反向投影:




#include <opencv2/opencv.hpp>
#include <iostream> using namespace cv;
using namespace std;
#define WINDOW_NAME "效果图" Mat src, hsv, hue;
Mat temp, temp_hsv, temp_hue;
int bin = ;//直方图组距
void on_BinChange(int, void*); int main(int argc, char** argv)
{
src = imread("test.jpg");
temp = imread("temp.jpg");
if (src.empty()|| temp.empty()) {
printf("Could not load image...");
return -;
}
imshow("Input Image",src); //转到HSV空间
cvtColor(src, hsv, COLOR_BGR2HSV);
cvtColor(temp, temp_hsv, COLOR_BGR2HSV); //分离Hue色调通道
hue.create(hsv.size(),hsv.depth());
temp_hue.create(temp_hsv.size(), temp_hsv.depth());
int ch[]= {,};
mixChannels(&hsv, , &hue, , ch, );
mixChannels(&temp_hsv, , &temp_hue, , ch, ); //创建Trackbar来输入bin的数目
namedWindow(WINDOW_NAME,WINDOW_AUTOSIZE);
createTrackbar("色调组距", WINDOW_NAME,&bin,, on_BinChange); //进行一次初始化
on_BinChange(, ); imshow(WINDOW_NAME, src); waitKey();
return ;
} void on_BinChange(int, void*)
{
//参数准备
MatND hist;
int histSize = max(bin, );
float hue_range[] = { , };//h通道的取值范围
const float* ranges = {hue_range}; //计算直方图并归一化
//calcHist(&hue, 1, 0, Mat(), hist, 1, &histSize, &ranges, true, false);
//normalize(hist,hist,0,255,NORM_MINMAX,-1,Mat());
calcHist(&temp_hue, , , Mat(), hist, , &histSize, &ranges, true, false);
normalize(hist, hist, , , NORM_MINMAX, -, Mat()); //计算反向投影
MatND backproj;
calcBackProject(&hue,,,hist,backproj,&ranges,,true); imshow("反向投影图", backproj); //绘制直方图参数准备
int w = , h = ;
int bin_w = cvRound((double)w/histSize);
Mat histImg = Mat::zeros(w,h,CV_8UC3); //绘制直方图
for(int i=;i<bin;i++)
{
rectangle(histImg, Point(i*bin_w,h),Point((i+)*bin_w,h-cvRound(hist.at<float>(i)*h/255.0)),Scalar(,,),-);
} imshow("直方图",histImg); }
直方图反向投影可以在“输入图像”中 找到和“模板”直方图特征相似的部分。
OpenCV——反向投影(定位模板图像在输入图像中的位置)的更多相关文章
- opencv——图像直方图与反向投影
引言 在图像处理中,对于直方图这个概念,肯定不会陌生.但是其原理真的可以信手拈来吗? 本文篇幅有点长,在此列个目录,大家可以跳着看: 分析图像直方图的概念,以及opencv函数calcHist()对于 ...
- OpenCV---直方图反向投影
一:直方图反向投影的方法 二:二维直方图的表示 (一)直接显示 def hist2D_demo(image): hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV) hi ...
- 14、OpenCV实现图像的空间滤波——图像锐化及边缘检测
1.图像锐化理论基础 1.锐化的概念 图像锐化的目的是使模糊的图像变得清晰起来,主要用于增强图像的灰度跳变部分,这一点与图像平滑对灰度跳变的抑制正好相反.而且从算子可以看出来,平滑是基于对图像领域的加 ...
- OpenCV常用基本处理函数(7)图像金字塔和直方图
高斯金字塔 高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的.顶部图像中的每个像素值等于下一层图像中 5 个像素的高斯加权平均值. 这样操作一次一个 MxN 的图像就变成了一个 M/2xN/ ...
- OpenCV 学习笔记(模板匹配)
OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够 ...
- 反向投影(BackProjection)
如果一幅图像的区域中显示的是一种结构纹理或者一个独特的物体,那么这个区域的直方图可以看作一个概率函数,他给的是某个像素属于该纹理或物体的概率. 所谓反向投影就是首先计算某一特征的直方图模型,然后使用模 ...
- OpenCV2马拉松第10圈——直方图反向投影(back project)
收入囊中 灰度图像的反向投影 彩色图像的反向投影 利用反向投影做object detect 葵花宝典 什么是反向投影?事实上没有那么高大上! 在上一篇博文学到,图像能够获得自己的灰度直方图. 反向投影 ...
- OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 图像 ...
- [zt]OpenCV如何获取视频当前的一帧图像
(OpenCV读取视频.OpenCV提取视频每一帧.每一帧图片合成新的AVI视频)CvCapture 是视频获取结构 被用来作为视频获取函数的一个参数 比如 CvCapture* cap; IplIm ...
随机推荐
- LINQ to Objects系列(2)两种查询语法介绍
LINQ为我们提供了两种查询语法,分别是查询表达式和查询方法语法.这篇文章分为以下几个方面进行总结. 1,一个包含两种查询语法的简单示例 2,查询表达式的结构 3,查询方法相关的运算符 一个包含两种查 ...
- ubuntu16.04下安装mysql,并开启远程访问
一.安装 apt-get install mysql-server 二.本地连接 mysql默认开启了本地连接 直接通过mysql -uuser -p,然后输入密码访问 三.开启远程访问 3.1.创建 ...
- Async Await异步调用WebApi
先铺垫一些基础知识 在 .net 4.5中出现了 Async Await关键字,配合之前版本的Task 来使得开发异步程序更为简单易控. 在使用它们之前 我们先关心下 为什么要使用它们.好比 一个 ...
- 启动HDFS时datanode无法启动的坑
启动HDFS 启动hdfs,进入sbin目录,也可以执行./start-all.sh - $cd /app/hadoop/hadoop-2.2.0/sbin - $./start-dfs.sh 在此之 ...
- document.head.appendChild(element) 在 IE8 及以下报错
问题: 在开发中会遇到动态添加 script 标签的情况. 代码如下: var oScript = document.createElement('script'); oScript.src = 'd ...
- django—xadmin中集成富文本编辑器ueditor
一.安装 pip命令安装,由于ueditor为百度开发的一款富文本编辑框,现已停止维护,如果解释器为python2,则直接pip install djangoueditor 解压包安装,python3 ...
- gulp前端自动化环境搭建详解
1.安装 nodejs Grunt和所有grunt插件都是基于nodejs来运行的, https://nodejs.org/ 安装完成之后在终端 node -v 查看安装版本 npm -v 查看np ...
- CentOS7查看开放端口命令及开放端口号
CentOS 7查看以开放端口命令:firewall-cmd —list-ports 查看端口是否开放命令:第一个方法就是使用lsof -i:端口号命令行,例如lsof -i:80.如果没有任何信息输 ...
- js 事件委托代理
在优化网页性能的技巧当中,对DOM的优化是必不可少的.这其中就涉及到了javascript对DOM的频繁操作.比如响应用户操作的事件.一般情况下,如果是稍微初级一点的前端程序员,在拿到项目的时候,对待 ...
- 关于对DI和IOC的概念理解
在spring框架学习过程中,涉及到两个新名词:DI和IOC.开始总是混淆两者的概念,稀里糊涂,后来上网搜了一下又和同学讨论之后,基本上理解了二者的概念.实际上DI(依赖注入)和IOC(控制反转)就是 ...