Python+OpenCV:直方图反向投影(Histogram Backprojection)

Algorithm in Numpy

1. First we need to calculate the color histogram of both the object we need to find (let it be 'M') and the image where we are going to search (let it be 'I').

import numpy as np
import cv2 as cvfrom matplotlib import pyplot as plt
#roi is the object or region of object we need to find
roi = cv.imread('rose_red.png')
hsv = cv.cvtColor(roi,cv.COLOR_BGR2HSV)
#target is the image we search in
target = cv.imread('rose.png')
hsvt = cv.cvtColor(target,cv.COLOR_BGR2HSV)
# Find the histograms using calcHist. Can be done with np.histogram2d also
M = cv.calcHist([hsv],[0, 1], None, [180, 256], [0, 180, 0, 256] )
I = cv.calcHist([hsvt],[0, 1], None, [180, 256], [0, 180, 0, 256] )

2. Find the ratio . Then backproject R, ie use R as palette and create a new image with every pixel as its corresponding probability of being target. ie B(x,y) = R[h(x,y),s(x,y)] where h is hue and s is saturation of the pixel at (x,y).

After that apply the condition B(x,y)=min[B(x,y),1].

h,s,v = cv.split(hsvt)
B = R[h.ravel(),s.ravel()]
B = np.minimum(B,1)
B = B.reshape(hsvt.shape[:2])

3. Now apply a convolution with a circular disc, B=D∗B, where D is the disc kernel.

disc = cv.getStructuringElement(cv.MORPH_ELLIPSE,(5,5))
cv.filter2D(B,-1,disc,B)
B = np.uint8(B)
cv.normalize(B,B,0,255,cv.NORM_MINMAX)

4. Now the location of maximum intensity gives us the location of object. If we are expecting a region in the image, thresholding for a suitable value gives a nice result.

ret,thresh = cv.threshold(B,50,255,0)

That's it !!

Backprojection in OpenCV

####################################################################################################
# 图像直方图反向投影(Histogram Backprojection)
def lmc_cv_image_histogram_backprojection():"""函数功能: 图像直方图反向投影(Histogram Backprojection)。"""# 图像直方图反向投影(Histogram Backprojection)# 读取图像roi = lmc_cv.imread('D:/99-Research/Python/Image/messi_roi.jpg')hsv_roi = lmc_cv.cvtColor(roi, lmc_cv.COLOR_BGR2HSV)target = lmc_cv.imread('D:/99-Research/Python/Image/messi.jpg')hsv_target = lmc_cv.cvtColor(target, lmc_cv.COLOR_BGR2HSV)target = lmc_cv.cvtColor(target, lmc_cv.COLOR_BGR2RGB)# calculating object histogramroihist = lmc_cv.calcHist([hsv_roi], [0, 1], None, [180, 256], [0, 180, 0, 256])# normalize histogram and apply backprojectionlmc_cv.normalize(roihist, roihist, 0, 255, lmc_cv.NORM_MINMAX)dst = lmc_cv.calcBackProject([hsv_target], [0, 1], roihist, [0, 180, 0, 256], 1)# Now convolute with circular discdisc = lmc_cv.getStructuringElement(lmc_cv.MORPH_ELLIPSE, (5, 5))lmc_cv.filter2D(dst, -1, disc, dst)# threshold and binary ANDret, thresh = lmc_cv.threshold(dst, 50, 255, 0)thresh = lmc_cv.merge((thresh, thresh, thresh))res = lmc_cv.bitwise_and(target, thresh)res = np.hstack((target, thresh, res))pyplot.figure('Image Display 1')pyplot.imshow(res, cmap='gray')pyplot.xticks([])pyplot.yticks([])pyplot.title('Histogram Backprojection')pyplot.show()# 根据用户输入保存图像if ord("q") == (lmc_cv.waitKey(0) & 0xFF):# 销毁窗口pyplot.close()return

Python+OpenCV:直方图反向投影(Histogram Backprojection)相关推荐

  1. opencv 直方图反向投影

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

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

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

  3. [python opencv 计算机视觉零基础到实战] 十五 直方图反向投影

    一.学习目标 了解了直方图反向投影的一般流程 了解2D直方图的使用 如有错误欢迎指出~ 二.了解直方图反向投影 2.1 了解2D直方图 需要对直方图进行反向投影,需要使用2D直方图.2D直方图需要使用 ...

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

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

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

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

  6. opencv 直方图_OpenCV之图像直方图反向投影

    python代码: import cv2 as cv import numpy as np from matplotlib import pyplot as pltdef back_projectio ...

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

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

  8. Mean Shift算法(2)在OpenCV上的实现目标跟踪——直方图反向投影

    直方图反向投影 直方图反向投影的结果是一个概率分布图,表示一个指定图像片段出现在特定位置的概率.假设我们已经知道图像中某个物体的大致位置,就可以用概率分布图找到物体的准确位置.最可能出现的位置就是窗口 ...

  9. OpenCV中反向投影

    OpenCV中反向投影 首先要说的可能要说的就是反向投影,用一个看到的例子来说可能更直观一些. [1234567891011129101315]\begin{bmatrix}1&2&3 ...

最新文章

  1. 两台电脑之间用网线之间传文件
  2. IDEA Spark程序报错处理
  3. python项目开发案例-Python项目开发案例集锦 PDF 全彩超清版
  4. Uva 1103 Ancient Messages
  5. tcpdump抓包分析具体解释
  6. kafka redis vs 发布订阅_发布订阅的消息系统 Kafka的深度解析
  7. UIScrollView无法滚动
  8. 我的个人作品——室内效果图
  9. JDK各个版本的特性分析|JDK7|JDK8|JDK9|JDK10|JDK11|JDK12|JDK13特性分析
  10. oracle 10102,linux - linux中的Oracle数据库安装程序[INS-10102]安装程序初始化失败 - SO中文参考 - www.soinside.com...
  11. LANP环境搭建(yum安装)
  12. 多普勒效应的原理及应用 一 多普勒现象的发现
  13. 感知哈希算法实现以图搜图软件
  14. 如何使单片机复位可靠,单片机复位电路?
  15. 6.5编程实例-立方体透视投影
  16. 上海有哪些牛逼的互联网公司?
  17. 重建系统的 WinRE
  18. 【SpringBoot整合Dubbo和Zookeeper】
  19. 互联网公司如何管理研发团队
  20. Head First Java资源

热门文章

  1. 权限组件之录入获取登入用户的所有权限
  2. 【软件工程实践 · 团队项目】 第一次作业
  3. [云计算] 001.云计算简介
  4. UVa1401 Remember the Word(DP+Trie树)
  5. MapXtreme IResultSetFeatureCollection
  6. jsp还能引用项目外的js,css啊
  7. 在线CSS3压缩美化格式化
  8. 第三节:SpringBoot中web项目推荐目录结构
  9. Java-Parallel GC介绍
  10. 延迟初始化Spring Bean的几种方式