欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2018年02月24日 08:30:28   作者:@fei  
這篇文章主要介紹了python opencv 直方圖反向投影的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

目標(biāo):

直方圖反向投影

原理:

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

算法實(shí)現(xiàn)的方法,首先要為包含我們感興趣區(qū)域的圖像建立直方圖(樣例要找一片草坪,其他的不要)。被查找的對象最好是占據(jù)整個圖像(圖像里全是草坪)。最好使用顏色直方圖,物體的顏色信息比灰度圖像更容易被分割和識別。再將顏色直方圖投影到輸入圖像查找目標(biāo),也就是找到輸入圖像中每一個像素點(diǎn)的像素值在直方圖中對應(yīng)的概率,這樣就得到一個概率圖像,最后設(shè)置適當(dāng)?shù)拈撝祵Ω怕蕡D像進(jìn)行二值化。

numpy算法:

建立兩幅顏色直方圖,目標(biāo)圖像直方圖(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)
#目標(biāo)搜索圖片
target = cv2.imread('33.jpg')
hsvt = cv2.cvtColor(target,cv2.COLOR_BGR2HSV)
#創(chuàng)建直方圖
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,根據(jù)R這個調(diào)色板創(chuàng)建新圖像,每一個像素代表這個點(diǎn)事目標(biāo)的概率。例如,B(x,y)=R[h(x,y),s(x,y),其中H為點(diǎn)(x,y)的色調(diào)(hue)值,s為點(diǎn)(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))#定義結(jié)構(gòu)形狀,5×5的橢圓
B=cv2.filter2D(B,-1,disc)#對圖像進(jìn)行卷積運(yùn)算
B = np.uint8(B)
cv2.normalize(B,B,0,255,cv2.NORM_MINMAX)

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

這里寫圖片描述 

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

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

opencv反向投影

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

roi區(qū)域圖片

這里寫圖片描述 

待搜索圖片

這里寫圖片描述 

結(jié)果

這里寫圖片描述

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)

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

#計算目標(biāo)直方圖
roihist = cv2.calcHist([hsv],[0,1],None,[180,256],[0,180,0,256])
#歸一化,參數(shù)為原圖像和輸出圖像,歸一化后值全部在2到255范圍
cv2.normalize(roihist,roihist,0,255,cv2.NORM_MINMAX)
dst = cv2.calcBackProject([hsvt],[0,1],roihist,[0,180,0,256],1)

#卷積連接分散的點(diǎn)
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)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Python中的Lock和Rlock

    詳解Python中的Lock和Rlock

    這篇文章主要介紹了Python中的Lock和Rlock的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python線程的相關(guān)知識,感興趣的朋友可以了解下
    2021-01-01
  • 對Python 多線程統(tǒng)計所有csv文件的行數(shù)方法詳解

    對Python 多線程統(tǒng)計所有csv文件的行數(shù)方法詳解

    今天小編就為大家分享一篇對Python 多線程統(tǒng)計所有csv文件的行數(shù)方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python的爬蟲框架scrapy用21行代碼寫一個爬蟲

    Python的爬蟲框架scrapy用21行代碼寫一個爬蟲

    最近在學(xué)習(xí)Python的爬蟲框架scrapy,通過爬取線報網(wǎng)站后發(fā)現(xiàn)整個過程還是挺值得學(xué)習(xí)的,所以下面這篇文章主要就給大家介紹了Python的爬蟲框架scrapy利用21行代碼寫一個爬蟲的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-04-04
  • python遞歸打印某個目錄的內(nèi)容(實(shí)例講解)

    python遞歸打印某個目錄的內(nèi)容(實(shí)例講解)

    下面小編就為大家?guī)硪黄猵ython遞歸打印某個目錄的內(nèi)容(實(shí)例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Python德勞內(nèi)三角剖分詳解

    Python德勞內(nèi)三角剖分詳解

    這篇文章主要為大家詳細(xì)介紹了Python中德勞內(nèi)三角剖分的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • 在Python中marshal對象序列化的相關(guān)知識

    在Python中marshal對象序列化的相關(guān)知識

    這篇文章主要介紹了在Python中marshal對象序列化的相關(guān)知識,是Python進(jìn)階學(xué)習(xí)中序列化相關(guān)的知識,需要的朋友可以參考下
    2015-07-07
  • 利用python爬取城市公交站點(diǎn)

    利用python爬取城市公交站點(diǎn)

    這篇文章主要介紹了利用Python爬蟲爬取城市公交站點(diǎn)的數(shù)據(jù),文中的代碼具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-12-12
  • Python list操作用法總結(jié)

    Python list操作用法總結(jié)

    這篇文章主要介紹了Python list操作用法,以實(shí)例形式較為詳細(xì)的總結(jié)分析了Python中l(wèi)ist的各種常見函數(shù)的功能與使用方法,需要的朋友可以參考下
    2015-11-11
  • Python變量賦值的秘密分享

    Python變量賦值的秘密分享

    在Python中,我們令一個變量等于另外一個變量時,并不是把值傳遞給它,而是直接把指向的地址更改了,我們通過一個小例子來看看這個有趣的過程,需要的朋友可以參考下
    2018-04-04
  • Pytorch backward報錯2次訪問計算圖需要retain_graph=True的情況詳解

    Pytorch backward報錯2次訪問計算圖需要retain_graph=True的情況詳解

    這篇文章主要介紹了Pytorch backward報錯2次訪問計算圖需要retain_graph=True的情況,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評論