欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python使用numpy实现直方图反向投影示例

程序员文章站 2022-06-20 14:36:34
最近跟着opencv2-python-tutorials在学习python_opencv中直方图的反向投影时,第一种方法是使用numpy实现将图中的红色玫瑰分割出来,教程给的代码缺了一...

最近跟着opencv2-python-tutorials在学习python_opencv中直方图的反向投影时,第一种方法是使用numpy实现将图中的红色玫瑰分割出来,教程给的代码缺了一句函数,导致实现不出来。

自己加上了后(也不知到这样加对不对)代码和效果如下:

代码:
import cv2
import numpy as np
roi = cv2.imread('./data/rose_red.jpg')
hsv = cv2.cvtcolor(roi,cv2.color_bgr2hsv)
#target is the image we search in
target = cv2.imread('./data/rose.jpg')
cv2.imshow('target',target)
hsvt = cv2.cvtcolor(target,cv2.color_bgr2hsv)
# find the histograms using calchist. can be done with np.histogram2d also
m = cv2.calchist([hsv],[0, 1], none, [180, 256], [0, 180, 0, 256] )
print(m)
i = cv2.calchist([hsvt],[0, 1], none, [180, 256], [0, 180, 0, 256] )
h,s,v = cv2.split(hsvt)
#斜体是自己加上的
r=m/i
print(r.shape)
b = r[h.ravel(),s.ravel()]
print(b)
b = np.minimum(b,1)
print(b)
b = b.reshape(hsvt.shape[:2])
disc = cv2.getstructuringelement(cv2.morph_ellipse,(9,9))
b=cv2.filter2d(b,-1,disc)
b = np.uint8(b)
cv2.normalize(b,b,0,255,cv2.norm_minmax)
cv2.imshow('b',b)
ret,thresh = cv2.threshold(b,2,255,0)
cv2.imshow('thresh',thresh)
res = cv2.bitwise_and(target,target,mask=thresh)
cv2.imshow('res',res)
cv2.waitkey(0)

效果:

rose_red.jpg

python使用numpy实现直方图反向投影示例

rose.jpg

python使用numpy实现直方图反向投影示例

result:

python使用numpy实现直方图反向投影示例

以上这篇python使用numpy实现直方图反向投影示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。