摘要:理論直方圖反向投影用于圖像分割或查找圖像中感興趣的對象簡單來說,它會創建一個與輸入圖像大小相同單個通道的圖像其中每個像素對應于屬于我們對象該像素的概率輸出圖像將使我們感興趣的對象比其余部分更明顯首先,我們創建一個包含我們感興趣對象的圖像的
Histogram - 4 : Histogram Backprojection
理論直方圖反向投影用于圖像分割或查找圖像中感興趣的對象,簡單來說,它會創建一個與輸入圖像大小相同(單個通道)的圖像,其中每個像素對應于屬于我們對象該像素的概率.輸出圖像將使我們感興趣的對象比其余部分更明顯.
首先,我們創建一個包含我們感興趣對象的圖像的直方圖,對象應盡可能填充圖像以獲得更好的結果,顏色直方圖比灰度直方圖更受青睞,因為對象的顏色比灰度強度更能定義對象,然后我們將這個直方圖“反投影”到我們需要找到對象的測試圖像上.
OpenCV中的反投影OpenCV提供了一個內置函數cv.calcBackProject()。 它的參數與cv.calcHist()函數幾乎相同. 此外,在傳遞給backproject函數之前,應該對象直方圖進行標準化. 它返回概率圖像,然后我們將圖像與內核卷積并應用閾值.
代碼:
import cv2 import numpy as np from matplotlib import pyplot as plt # roi是我們需要找到的對象或區域 roi = cv2.imread("img_roi.png") hsv = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV) # target是我們搜索的圖像 target = cv2.imread("img.jpg") hsvt = cv2.cvtColor(target, cv2.COLOR_BGR2HSV) # 計算對象的直方圖 roihist = cv2.calcHist([hsv], [0,1], None, [180,256], [0,180,0,256]) # 標準化直方圖,并應用投影 cv2.normalize(roihist, roihist, 0, 255, cv2.NORM_MINMAX) dst = cv2.calcBackProject([hsvt], [0,1], roihist, [0,180,0,256], 1) # 與磁盤內核進行卷積 disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5)) cv2.filter2D(dst, -1, disc, dst) # 閾值、二進制按位和操作 ret, thresh = cv2.threshold(dst, 50, 255, 0) thresh = cv2.merge((thresh, thresh, thresh)) res = cv2.bitwise_and(target, thresh) res = np.vstack((target, thresh, res)) cv2.imshow("res", res) cv2.waitKey()
原圖:
感興趣區域:
結果:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42038.html
摘要:算法的基本原理簡單假設我們有一堆點,和一個小的圓形窗口,算法就是不斷移動小圓形窗口,直到找到圓形區域內最大灰度密度處為止初始窗口以藍色圓圈顯示,名稱為其原始中心標有藍色矩形,名為但是,這個窗口當中所有點的點集構成的質心在藍色圓形點處圓環的型 Meanshift and Camshift Meanshift Meanshift 算法的基本原理簡單,假設我們有一堆點,和一個小的圓形窗口,...
閱讀 844·2023-04-25 21:21
閱讀 3226·2021-11-24 09:39
閱讀 3067·2021-09-02 15:41
閱讀 1993·2021-08-26 14:13
閱讀 1827·2019-08-30 11:18
閱讀 2768·2019-08-29 16:25
閱讀 507·2019-08-28 18:27
閱讀 1580·2019-08-28 18:17