zoukankan      html  css  js  c++  java
  • 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)

    以下图为例:

    原图:

    垂直投影为:

     水平投影为:

  • 相关阅读:
    Can you answer these queries?(HDU4027+势能线段树)
    Tunnel Warfare(HDU1540+线段树+区间合并)
    Computer(HDU2196+树形dp+树的直径)
    Anniversary party(树上dp+HDU1520)
    2018 Multi-University Training Contest 1-1002 -Balanced Sequence(括号匹配+贪心)
    暑假集训——cf热身赛部分题有感加其题解
    Educational Codeforces Round 47 (Rated for Div. 2) 题解
    计蒜客 Goldbach Miller_Rabin判别法(大素数判别法)
    多种方法过Codeforces Round #270的A题(奇偶法、打表法和Miller_Rabin(这个方法才是重点))
    Codeforces Round #494 (Div. 3)
  • 原文地址:https://www.cnblogs.com/mulin1999/p/12493867.html
Copyright © 2011-2022 走看看