python使用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

rose.jpg

result:

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

以上是 python使用numpy实现直方图反向投影示例 的全部内容, 来源链接: utcz.com/z/341813.html

回到顶部