文档章节

Python OpenCV学习笔记之:图像直方图反向投影(backprojection)原理简单实现

IOTService
 IOTService
发布于 2016/12/07 12:57
字数 343
阅读 342
收藏 0
# -*- coding: utf-8 -*-
"""
图像直方图反向投影简单实现
如果一幅图像的区域中显示的是一种结构纹理或者一个独特的物体,那么这个区域的直方图可以看作一个概率函数,
它给的是某个像素属于该纹理或物体的概率。
所谓反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找测试图像中存在的该特征。
"""

import cv2
import numpy as np
from matplotlib import pyplot as plt

# roi is the object or region of object we need to find
roi = cv2.imread('../../../../datas/images/fish.jpg')
hsv = cv2.cvtColor(roi,cv2.COLOR_BGR2HSV)

# target is the image we search in
target = cv2.imread('../../../../datas/images/fish-target.jpg')
hsvt = cv2.cvtColor(target,cv2.COLOR_BGR2HSV)

M = cv2.calcHist([hsv],[0, 1], None, [180, 256], [0, 180, 0, 256] )
I = cv2.calcHist([hsvt],[0, 1], None, [180, 256], [0, 180, 0, 256] )

R = M/(I+1)
#p rint R.max()
# cv2.normalize(prob,prob,0,255,cv2.NORM_MINMAX,0)

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

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

ret,thresh = cv2.threshold(B,50,255,0)
res = cv2.bitwise_and(target,target,mask = thresh)
cv2.imshow('nice',res)
cv2.imshow('img',target)
res = np.vstack((target,cv2.merge((B,B,B)),res))
#cv2.imwrite('thresh.png',thresh)
#cv2.imwrite('output.png',res)
cv2.imshow("result",res)

cv2.waitKey(0)
cv2.destroyAllWindows()

© 著作权归作者所有

共有 人打赏支持
IOTService
粉丝 16
博文 138
码字总数 30215
作品 0
广州
程序员
视频分析(一):Meanshift均值漂移和Camshift算法来查找和跟踪视频中的对象

目标 在这一章当中, 我们将学习Meanshift和Camshift算法来查找和跟踪视频中的对象。 均值漂移 手段背后的直觉很简单。考虑你有一组点。(它可以是像直方图反投影的像素分布)。您会看到一个...

漫步当下
05/19
0
0
人脸检测原理及示例(OpenCV+Python)

前言 关于opencv OpenCV 是 Intel 开源计算机视觉库 (Computer Version) 。它由一系列 C 函数和少量 C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV 拥有包括 300 多个 ...

张卫泉
2012/09/12
0
2
基于OpenCV和Python的文件操作——捕获摄像头的帧,在窗口显示图像,在窗口显示摄像头帧和视频文件的读/写

0 写在前面 这篇博客主要参考资料为《OpenCV 3计算机视觉Python语言实现》(Learning OpenCV 3 Computer Vison with Python)。 因为之前用Faster R-CNN做过一个红绿灯检测的小实践,但是Git...

learning_tortosie
04/12
0
0
OpenCV-Python(1)在Python中使用OpenCV进行人脸检测

OpenCV是如今最流行的计算机视觉库,而我们今天就是要学习如何安装使用OpenCV,以及如何去访问我们的摄像头。然后我们一起来看看写一个人脸检测程序是如何地简单,简单到只需要几行代码。 在...

煎鱼不可能有BUG
05/23
0
0
在Python中使用OpenCV进行人脸检测

OpenCV是如今最流行的计算机视觉库,而我们今天就是要学习如何安装使用OpenCV,以及如何去访问我们的摄像头。然后我们一起来看看写一个人脸检测程序是如何地简单,简单到只需要几行代码。 在...

煎鱼不可能有BUG
05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

HTML显示json字符串并且进行格式化

通过pre标签进行格式化展示,使用JSON.stringify()方法转换。 代码如下:   <html> <head> <title>HTML显示json字符串并且进行格式化</title> </head> <body> <p id="show_p">{ "name": "B......

writeademo
1分钟前
0
0
LNMP——php-fpm

php-fpm的pool •vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加include并删除我们之前www池子 • include = etc/php-fpm.d/*.conf • mkdir /usr/local/php/etc/php-fpm.d/ • ......

chencheng-linux
4分钟前
0
0
fixed在微信下的BUG

最近在一个项目中,碰到了一个问题,是属于微信内部的问题,或者说,是属于APP内部的问题,它的根源来自于fixed定位以及-webkit-overflow-scrolling的组合使用,虽然现在还无法理解问题的根源...

Jack088
8分钟前
0
0
sentry错误日志收集

安装方式 : 1 docker 2 Python 安装docker,使用命令 sudo yum -y install docker-io 启动docker 使用命令service docker start docker换源sudo curl -sSL https://get.daocloud.io/daotoo......

猿神出窍
10分钟前
0
0
input输入框的限制

1、键入时候保存数字, 问题:多个输入框的时候,连续输入非数字,导致删除的非数字出现 onkeyup="this.value=this.value.replace(/\D/g,'')" 2、onkeypress,返回true和false来设置是否键入...

大美琴
12分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部