91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python opencv 直方圖反向投影的方法

發布時間:2020-10-22 19:33:00 來源:腳本之家 閱讀:213 作者:@fei 欄目:開發技術

本文介紹了python opencv 直方圖反向投影的方法,分享給大家,具體如下:

目標:

直方圖反向投影

原理:

反向投影可以用來做圖像分割,尋找感興趣區間。它會輸出與輸入圖像大小相同的圖像,每一個像素值代表了輸入圖像上對應點屬于目標對象的概率,簡言之,輸出圖像中像素值越高的點越可能代表想要查找的目標。直方圖投影經常與camshift(追蹤算法)算法一起使用。

算法實現的方法,首先要為包含我們感興趣區域的圖像建立直方圖(樣例要找一片草坪,其他的不要)。被查找的對象最好是占據整個圖像(圖像里全是草坪)。最好使用顏色直方圖,物體的顏色信息比灰度圖像更容易被分割和識別。再將顏色直方圖投影到輸入圖像查找目標,也就是找到輸入圖像中每一個像素點的像素值在直方圖中對應的概率,這樣就得到一個概率圖像,最后設置適當的閾值對概率圖像進行二值化。

numpy算法:

建立兩幅顏色直方圖,目標圖像直方圖(M),輸入圖像直方圖(I)

import cv2
import numpy as np
from matplotlib import pyplot as plt
#roi圖片,就想要找的的圖片
roi = cv2.imread('3.jpg')
hsv = cv2.cvtColor(roi,cv2.COLOR_BGR2HSV)
#目標搜索圖片
target = cv2.imread('33.jpg')
hsvt = cv2.cvtColor(target,cv2.COLOR_BGR2HSV)
#創建直方圖
M = cv2.calcHist([hsv],[0,1],None,[180,256],[0,180,0,256])
I = cv2.calcHist([hsvt],[0,1],None,[180,256],[0,180,0,256])

計算比值:R=MI。反向投影R,根據R這個調色板創建新圖像,每一個像素代表這個點事目標的概率。例如,B(x,y)=R[h(x,y),s(x,y),其中H為點(x,y)的色調(hue)值,s為點(x,y)的飽和度(saturation)。最后加入條件B(x,y)=min([B(x,y),1]

h,s,v = cv2.split(hsvt)
B = R[h.ravel(),s.ravel()]
B = np.minimum(B,1)
B = B.reshape(hsvt.shape[:2])

使用圓盤算子做卷積,B=D×B,其中D為卷積核

disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))#定義結構形狀,5×5的橢圓
B=cv2.filter2D(B,-1,disc)#對圖像進行卷積運算
B = np.uint8(B)
cv2.normalize(B,B,0,255,cv2.NORM_MINMAX)

其中函數cv2.getStructuringElement是定義結構元素,例如element = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)) 定義了一個十字形,5×5的結構

python opencv 直方圖反向投影的方法 

輸出圖像中灰度最大的地方就是目標位置。如果要找的是一個區域,可以使用一個閾值對圖像二值化,這樣能得到不錯的結果。

ret,thresh = cv2.threshold(B,50,255,0)

opencv反向投影

函數 cv2.calcBackProject()直接實現反向投影,參數與cv2.calcHist基本一致。其中一個參數是要查找的目標的直方圖。在使用目標直方圖反向投贏錢應該進行歸一化處理。返回結果是一個概率圖像,然后進行圓盤形狀卷積操作,再二值化。

roi區域圖片

python opencv 直方圖反向投影的方法 

待搜索圖片

python opencv 直方圖反向投影的方法 

結果

python opencv 直方圖反向投影的方法

import cv2
import numpy as np
from matplotlib import pyplot as plt
#roi圖片,就想要找的的圖片
roi = cv2.imread('33.jpg')
hsv = cv2.cvtColor(roi,cv2.COLOR_BGR2HSV)

#目標搜索圖片
target = cv2.imread('3.jpg')
hsvt = cv2.cvtColor(target,cv2.COLOR_BGR2HSV)

#計算目標直方圖
roihist = cv2.calcHist([hsv],[0,1],None,[180,256],[0,180,0,256])
#歸一化,參數為原圖像和輸出圖像,歸一化后值全部在2到255范圍
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))
dst = cv2.filter2D(dst,-1,disc)

ret,thresh = cv2.threshold(dst,50,255,0)
#使用merge變成通道圖像
thresh = cv2.merge((thresh,thresh,thresh))

#蒙板
res = cv2.bitwise_and(target,thresh)
#矩陣按列合并,就是把target,thresh和res三個圖片橫著拼在一起
res = np.hstack((target,thresh,res))

cv2.imwrite('res.jpg',res)
#顯示圖像
cv2.imshow('1',res)
cv2.waitKey(0)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金坛市| 桐柏县| 葫芦岛市| 荆州市| 自贡市| 汨罗市| 句容市| 新巴尔虎右旗| 奎屯市| 类乌齐县| 湖口县| 泽州县| 辰溪县| 乌恰县| 临泉县| 封开县| 合阳县| 漯河市| 周至县| 图片| 峡江县| 铜陵市| 和平县| 泸定县| 砚山县| 东城区| 塔城市| 银川市| 庆城县| 哈巴河县| 柯坪县| 南岸区| 上饶市| 吉林市| 玛曲县| 溧水县| 鸡泽县| 钟山县| 定南县| 雷山县| 东宁县|