Python + openCV 實現圖像垂直投影和水平投影


Python + openCV 實現圖像垂直投影和水平投影

1. 先將需要投影的圖片轉為灰度圖,我寫了兩個函數,分別實現對圖像進行垂直投影和水平投影;

if __name__ == '__main__':

    img = cv2.imread('C:\\Users\\24493\\Desktop\\123.jpg')  
    cv2.imshow("image",img)
    GrayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  #將img圖像轉換為灰度圖,輸出為GrayImage
    getVProjection(GrayImage)  #調用getVProjection函數進行垂直投影
    getHProjection(GrayImage)  #調用getHProjection函數進行水平投影
    cv2.waitKey(0)  
    cv2.destroyAllWindows()

2. 進行垂直投影,將傳入的灰度圖轉為黑白二值圖,統計出每列的黑色點,然后再將統計結果全部集中在底部顯示

def getVProjection(image):
    # 將image圖像轉為黑白二值圖,ret接收當前的閾值,thresh1接收輸出的二值圖
    ret, thresh1 = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)  
    (h,w)=thresh1.shape #返回高和寬
    a = [0 for z in range(0, w)] #a = [0,0,0,...,0,0]初始化一個長度為w的數組,用於記錄每一列的黑點個數  
     
    #記錄每一列的波峰
    for j in range(0,w): #遍歷一列 
        for i in range(0,h):  #遍歷一行
            if  thresh1[i,j]==0:  #如果該點為黑點
                a[j]+=1          #該列的計數器加一計數
                thresh1[i,j]=255  #記錄完后將其變為白色 
          
    for j  in range(0,w):  #遍歷每一列
        for i in range((h-a[j]),h):  #從該列應該變黑的最頂部的點開始向最底部塗黑
            thresh1[i,j]=0   #塗黑
    
    cv2.imshow('Vimage',thresh1)

3. 進行水平投影,將傳入的灰度圖轉為黑白二值圖,統計出每行的黑色點,然后再將統計結果全部集中在左邊顯示;

def getHProjection(image):
    # 將image圖像轉為黑白二值圖,ret接收當前的閾值,thresh1接收輸出的二值圖
    ret, thresh1 = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) 
    (h,w)=thresh1.shape #返回高和寬
    a = [0 for z in range(0, h)]  #a = [0,0,0,...,0,0]初始化一個長度為h的數組,用於記錄每一行的黑點個數  
     
    #記錄每一行的波峰
    for j in range(0,h): #遍歷一行 
        for i in range(0,w):  #遍歷一列
            if  thresh1[j,i]==0:  #如果該點為黑點
                a[j]+=1          #該列的計數器加一計數
                thresh1[j,i]=255  #記錄完后將其變為白色 
          
    for j  in range(0,h):  #遍歷每一行
        for i in range(a[j]):  #從該行頂部的點開始向右塗黑統計的黑點數
            thresh1[j,i]=0   #塗黑
    
    cv2.imshow('Himage',thresh1)

以下圖為例:

原圖:

 

 

垂直投影為:

 

 水平投影為:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM