OpenCV中反向投影

首先要说的可能要说的就是反向投影,用一个看到的例子来说可能更直观一些。
[1234567891011129101315]\begin{bmatrix}1&2&3&4 \\ 5&6&7&8 \\ 9&10&11&12 \\ 9&10&13&15 \end{bmatrix}⎣⎢⎢⎡​1599​261010​371113​481215​⎦⎥⎥⎤​
假设该矩阵为一个图像的像素分布,首先我们根据该矩阵找到图像的直方图,假设图像的bin值范围为[1,4],[5,8],[9,11],[12,15][1,4],[5,8],[9,11],[12,15][1,4],[5,8],[9,11],[12,15]
可以得到图像的各个像素的个数:
[1,4]:4[1,4]:4[1,4]:4

[5,8]:4[5,8]:4[5,8]:4

[9,11]:5[9,11]:5[9,11]:5

[12,15]:3[12,15]:3[12,15]:3

我们得到了各个像素的在图像中出现的次数,然后遍历原图像,例如第一个像素点,像素值为1在[1,4][1,4][1,4]这个范围内,所以将该点的像素值改为该范围统计的频值即是4,对所有的像素执行上述的操作,可以得到如下矩阵:
[4444444455535533]\begin{bmatrix}4&4&4&4\\4&4&4&4 \\5&5&5&3\\5&5&3&3 \end{bmatrix}⎣⎢⎢⎡​4455​4455​4453​4433​⎦⎥⎥⎤​
这个过程就是我们所说的反向投影。

第二个需要知道的是HSV图像。HSV表示一个色彩空间,也是三通道的,类似与RGB图像,在RGB图像中每个通道代表的是三原色之一,而在HSV中每个通道代表的意思与RGB完全不同。
H通道表示色调在OpenCV中取值范围为0-180,
S为饱和度,取值范围为0-255表示颜色接近光谱的程度,一种颜色可以看成时光谱色与白色混合的结果。其中光谱色占的比例越大,颜色的饱和度也就越高。
V为亮度,取值范围为0-255。

HSV通道的获取,利用mixChannels函数来实现:

    hue.create(hsv.size(),hsv.depth());int ch[] = {0,0};mixChannels(&hsv,1,&hue,1,ch,1);

hsv.depth();在OpenCV中该函数用来显示图像的深度,什么叫图像的深度呢?作为小白的我去求助了度娘,例如灰度图,每个像素的值的范围为0-255,需要8位二进制数才能表示255,所以叫该图的位深为8。

mixChannels(输入图像,矩阵的数量,输出图像,深度和大小必须和输入图像0通道相同矩阵的数量,被复制通道和要复制到的位置组成索引对,例如从原图的0通道到0通道索引对的数目。
);

分离通道时需要注意,HSV中,H在0通道,S在1通道,V在2通道。
在这个地方,有一个疑惑,之前我们对图像通道分离都是采用split这个函数来进行,\color{#f00}在这个地方,有一个疑惑,之前我们对图像通道分离都是采用split这个函数来进行,在这个地方,有一个疑惑,之前我们对图像通道分离都是采用split这个函数来进行,这里没有使用,那么split是否可以呢所以我就试了一下,发现可以。\color{#f00}这里没有使用,那么split是否可以呢所以我就试了一下,发现可以。这里没有使用,那么split是否可以呢所以我就试了一下,发现可以。

     vector<Mat> v;split(hsv,v);hue = v[0];

下面就是由OpenCV提供的反向投影的API函数:

calcBackProjection(输入图像,深度必须为cv_8u、cv_16u、cv_32f的一种输入图像的数量,用于反向投影的通道列表输入的直方图,输出的单通道反向投影的图像,直方图中每个维度bin的取值范围double scale=1:可选输出反向投影的比例因子直方图是否均匀分布的标识符,默认为true
);

下面看一个手敲的小demo:

#include "opencv2/opencv.hpp"using namespace std;
using namespace cv;Mat src,hsv,hue;
int bins = 25;void Hist_and_Backproj(int,void*)
{Mat hist;int histSize = MAX(bins,2);float hue_range[] = {0,180};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());Mat backproj;calcBackProject(&hue,1,0,hist,backproj,&ranges,1,true);imshow("backproj",backproj);
}int main(int argc, char *argv[])
{src = imread("/home/dynamicw/Project/C++_Project/opencvtest/src/lesson01/source/map.png");cvtColor(src,hsv,CV_BGR2HSV);hue.create(hsv.size(),hsv.depth());int ch[] = {0,0};mixChannels(&hsv,1,&hue,1,ch,1);//vector<Mat> v;//split(hsv,v);//hue = v[0];namedWindow("Test",CV_WINDOW_AUTOSIZE);createTrackbar("Test","Test",&bins,180,Hist_and_Backproj);Hist_and_Backproj(0,0);waitKey(0);return 0;
}

OpenCV中反向投影相关推荐

  1. 【OpenCV 】反向投影

    目录 1 目标 2原理:什么是反向投影? 3 代码实现 4 实现结果 1 目标 什么是反向投影,它可以实现什么功能? 如何使用OpenCV函数 calcBackProject 计算反向投影? 如何使用 ...

  2. opencv 直方图反向投影

    转载至:http://www.cnblogs.com/zsb517/archive/2012/06/20/2556508.html 直方图反向投影式通过给定的直方图信息,在图像找到相应的像素分布区域, ...

  3. OpenCV学习(二十二) :反向投影:calcBackProject(),mixChannels()

    OpenCV学习(二十二) :反向投影:calcHist(),minMaxLoc(),compareHist() 参考博客: 反向投影backproject的直观理解 opencv 反向投影 颜色直方 ...

  4. opencv python 直方图反向投影_python OpenCV学习笔记直方图反向投影的实现

    本文介绍了python OpenCV学习笔记直方图反向投影的实现,分享给大家,具体如下: 它用于图像分割或寻找图像中感兴趣的对象.简单地说,它创建一个与我们的输入图像相同大小(但单通道)的图像,其中每 ...

  5. OpenCV + CPP 系列(十九)直方图比较 与 直方图反向投影,投影分割

    文章目录 一.直方图比较 计算公式 效果演示 二.直方图反向投影 三.投影分割 一.直方图比较 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间,然后可以通过计算H1与H2的之间的距离 ...

  6. OpenCV中直方图反向投影算法详解与实现

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自:opencv学堂 一:直方图交叉 OpenCV中直方图反向 ...

  7. Python-OpenCV 处理图像(四)(五):图像直方图和反向投影 图像中边界和轮廓检测

    当我们想比较两张图片相似度的时候,可以使用这一节提到的技术 直方图对比 反向投影 关于这两种技术的原理可以参考我上面贴的链接,下面是示例的代码: 0x01. 绘制直方图 import cv2.cv a ...

  8. OpenCV之imgproc 模块. 图像处理(4)直方图均衡化 直方图计算 直方图对比 反向投影 模板匹配

    直方图均衡化 目标 在这个教程中你将学到: 什么是图像的直方图和为什么图像的直方图很有用 用OpenCV函数 equalizeHist 对图像进行直方图均衡化 原理 图像的直方图是什么? 直方图是图像 ...

  9. opencv进阶学习笔记7:直方图,直方图均衡化,直方图比较,直方图反向投影

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 直方图基础讲解: opencv学 ...

最新文章

  1. 在 Ubuntu 上安装最新版本的 Erlang方法介绍
  2. ArcGIS Server常见问题集锦(转载)
  3. windows10自动填充密码开机自动登陆
  4. python修改手机默认语言_修改 CentOS 6.x 上默认Python的方法
  5. 【渝粤题库】广东开放大学 民事诉讼法 形成性考核
  6. mysql重置root密码方法
  7. java 线程 状态 图_Java提高——多线程(一)状态图
  8. 大数据之-Hadoop之HDFS的API操作_判断是文件还是文件夹---大数据之hadoop工作笔记0062
  9. AcWing1089.烽火传递(单调队列DP)
  10. NFS挂载及写入故障
  11. java 正则表达式 替换 html,java 正则表达式 替换 html
  12. OBS Studio录制腾讯会议
  13. android 开源项目收集
  14. GCJ-02火星坐标系和WGS-84坐标系转换关系
  15. 流程图与算法_流程图与算法之间的区别
  16. AI笔记: 数学基础之齐次与非齐次线性方程组解的结构定理
  17. 嵌入式linux调节lcd背光,背光调节的软件设计 - 基于嵌入式Linux的LCD背光调节及驱动实现...
  18. jQuery下载和基础使用(超详细)
  19. 《自為墓誌銘·〔明〕張岱》原文|譯文|注釋|賞析
  20. 浅谈2019互联网新技术

热门文章

  1. 如何绘制逻辑图 — 6.要素的属性:内聚与解耦
  2. 作者:孙晨(1995-),女,华东师范大学数据科学与工程研究院硕士生
  3. 斐波那契数列升级版(洛谷P2626题题解,C++语言描述)
  4. 【Java】Socket多客户端Client-Server聊天程序
  5. 分析阶段的类图和设计阶段的类图有什么区别?
  6. C++ 工厂模式(设计模式)
  7. 基于特征的文法分析以及概述自然语言处理
  8. TensorFlow 之快速上手详解
  9. 课堂练习:eval()、in()
  10. 深入理解Docker Volume(一)