1. 程式人生 > 程式設計 >python使用numpy實現直方圖反向投影示例

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],180,256] )
print(M)
I = cv2.calcHist([hsvt],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,255,cv2.NORM_MINMAX)
cv2.imshow('B',B)
ret,thresh = cv2.threshold(B,2,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實現直方圖反向投影示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。