python代码:

import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltdef back_projection_demo():sample = cv.imread("./Mat.png")# hist2d_demo(sample)target = cv.imread("./test.png")# hist2d_demo(target)roi_hsv = cv.cvtColor(sample, cv.COLOR_BGR2HSV)target_hsv = cv.cvtColor(target, cv.COLOR_BGR2HSV)# show imagescv.imshow("sample", sample)cv.imshow("target", target)roiHist = cv.calcHist([roi_hsv], [0, 1], None, [32, 32], [0, 180, 0, 256])cv.normalize(roiHist, roiHist, 0, 255, cv.NORM_MINMAX)dst = cv.calcBackProject([target_hsv], [0, 1], roiHist, [0, 180, 0, 256], 1)cv.imshow("backProjectionDemo", dst)def hist2d_demo(image):hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)hist = cv.calcHist([hsv], [0, 1], None, [32, 32], [0, 180, 0, 256])dst = cv.resize(hist, (400, 400))cv.imshow("image", image)cv.imshow("hist", dst)plt.imshow(hist, interpolation='nearest')plt.title("2D Histogram")plt.show()back_projection_demo()
cv.waitKey(0)cv.destroyAllWindows()

C++代码:

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;const int bins = 256;
Mat src;
const char* winTitle = "input image";
void backProjection_demo(Mat &image, Mat &model);
int main(int argc, char** argv) {Mat src = imread("./Mat.png");Mat model = imread("./test.png");if (src.empty() || model.empty()) {printf("could not load image...n");return 0;}namedWindow(winTitle, WINDOW_AUTOSIZE);imshow(winTitle, src);imshow("model", model);backProjection_demo(src, model);waitKey(0);return 0;
}void backProjection_demo(Mat &image, Mat &model) {Mat model_hsv, image_hsv;cvtColor(model, model_hsv, COLOR_BGR2HSV);cvtColor(image, image_hsv, COLOR_BGR2HSV);// ����ֱ��ͼ����������int h_bins = 32; int s_bins = 32;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* ranges[] = { h_ranges, s_ranges };int channels[] = { 0, 1 };Mat roiHist;calcHist(&model_hsv, 1, channels, Mat(), roiHist, 2, histSize, ranges, true, false);normalize(roiHist, roiHist, 0, 255, NORM_MINMAX, -1, Mat());MatND backproj;calcBackProject(&image_hsv, 1, channels, roiHist, backproj, ranges, 1.0);imshow("BackProj", backproj);
}

文字解释: 图像直方图反向投影是通过构建指定模板图像的二维直方图空间与目标的二维直方图空间,进行直方图数据归一化之后, 进行比率操作,对所有得到非零数值,生成查找表对原图像进行像素映射之后,再进行图像模糊输出的结果。

直方图反向投影流程:

- 计算直方图

- 计算比率R

- LUT查找表

- 卷积模糊

- 归一化输出

相关API :

- calcBackProject 看第一张图

OpenCV学习笔记代码,欢迎follow:

MachineLP/OpenCV-​github.com

opencv 直方图_OpenCV之图像直方图反向投影相关推荐

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

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

  2. 【opencv学习】【图像直方图和均衡化】

    今天学习图像直方图和图像均衡化 一:图像直方图 import cv2 import numpy as np import matplotlib.pyplot as plt# 图像的直方图,就是统计哪些 ...

  3. opencv学习(三十九)之反向投影calcBackProject()

    1.概述 反向投影是一种记录给定图像中的像素点如何适应直方图模型像素分布的方式,简单来讲,反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找图像中存在的特征.反向投影在某一位置的值就是原图对 ...

  4. python实现opencv学习十一:图像直方图

    绘出图片直方图 代码: # -*- coding=GBK -*- import cv2 as cv #导入整个cv2包 from matplotlib import pyplot as plt #从m ...

  5. lm opencv 算法_OpenCV进行图像相似度对比的几种办法

    // PSNR.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include // Console I/O #include // St ...

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

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

  7. 花老湿学习OpenCV:直方图、直方图的计算、均衡化、对比、反向投影

    直方图概述: 在统计学中,直方图是一种对数据分布情况的图形表示,是一种二维统计图表,他的两个坐标分别是统计样本(图像.视频帧)和样本的某种属性(亮度,像素值,梯度,方向,色彩等等任何特征). 也可以这 ...

  8. 《OpenCV3编程入门》学习笔记9 直方图与匹配(四)反向投影(back projection)

    9.4 反向投影(back projection) 9.4.1 反向投影原理 1.基本思想:   反向投影中储存的数值代表了图像中该像素属于区域的概率,计算某一特征的直方图模型,使用模型寻找图像中存在 ...

  9. OpenCV图像处理学习二十,图像直方图均衡化原理与实现

    一.图像直方图的概念 图像直方图,是指对整个图像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图.直方图反映了图像灰度的分布情况,是图像的统计学特征.图像的灰度直方 ...

最新文章

  1. Ubuntu 中的 dpkg 安装deb、删除deb、显示已安装包列表、解压deb文件、显示deb包内文件列表、配置deb软件包
  2. Material Design Lite,简洁惊艳的前端工具箱。
  3. GitHub移动App上线:四大特性,手机端无缝完成git任务
  4. rtt 打印 float
  5. 只返回数据表的部分字段(不建类)
  6. mysql单库tps_简单计算mysql 的QPS,TPS
  7. 日志框架简述、slf4j 日志框架概述,slf4j + log4j 1.X 日志组合
  8. HP刀片带外管理系统OA各功能实例示范
  9. linux禁止root用户远程登录,linux禁止root用户远程登录
  10. tasklist 结束进程_netstat -ano,ntsd;tasklist,tskill-查看杀死进程命令 | 学步园
  11. 黑莓手机BlackBerry Servicebook(简称SB)应用详解指南
  12. 基于51单片机的温度检测监测报警系统设计
  13. 怎么在桌面添加windows便签记事本
  14. 读《淘宝技术这十年》有感
  15. sqrt mysql_详解MySQL中的SQRT函数的使用方法_MySQL
  16. HZNU-1480-The Gougu Theorem【勾股数】
  17. PHP 代码 微信、公众号、企业微信 发送表情符号 [U+1F449]
  18. 9.17xiecheng面试总结
  19. 美国囤积零日漏洞的目的何在?
  20. 虚拟人物设计-虚拟动作编排-虚拟数字人生成

热门文章

  1. tomcat源码分析_百战卓越108天tomcat和servlet源码分析
  2. python多元回归预测例子_Python机器学习,多元线性回归分析问题
  3. python升级pip怎么出错了_Python,开启吐槽模式,新手必看!
  4. 2020noi普及组优秀的拆分_吉首市乾元小学荣获北斗领航梦想全国青少年科技实践活动优秀组织奖...
  5. 25个好用到爆的一行Python代码,建议收藏
  6. 分享珍藏很久的Python学习知识手册
  7. 作为微型计算机各种部件相互连接的纽带,网络学院统考计算机基础知识选择题及答案(19页)-原创力文档...
  8. go ssh 执行多个命令_每天一个 Linux 命令(92): dirname 命令
  9. python3输入框_Python3 tkinter基础 Entry get 点击按钮 将输入框中文字输出到控制台...
  10. linux select read阻塞_linux下的IO模型详解