python使用numpy實現直方圖反向投影示例
阿新 • • 發佈:2020-01-18
最近跟著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實現直方圖反向投影示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。