簡體   English   中英

Python + OpenCV:枚舉矩陣

[英]Python + OpenCV: Enumerate Matrix

我是Python的新手。

我想從opencv訪問Mat(一個閾值二進制圖像)元素並根據x軸創建一個直方圖,因此我可以垂直進行一些圖像分割。

我所做的是預處理圖像並按以下方式枚舉兩次。

def crack(src):
    #src is a binary image 

    src = cv2.resize(src, (0,0), fx=6, fy=6)
    thresh = preprocessing(src)

    #create empty histogram
    print(thresh.shape)
    height, width = thresh.shape
    size = height ,255,  3
    hist = np.zeros(size, dtype=np.uint8)

    #enumerate elements
    for y, x in enumerate(thresh):
        val = 0
        for x, pix in enumerate(x):
            val = val+ pix/255
            print y,x, val
        cv2.rectangle(hist, (y, 255-val), (y+val, 255-val+1), (0, 255, 0), 1)

    cv2.imshow("thresh", thresh)
    cv2.imshow("hist", hist)

如果我直接枚舉Mat的閾值就好了

    for y, x in enumerate(thresh):

我只能先從外部y軸枚舉,然后枚舉x軸。 那我該怎么做呢? 我的目標是獲得這樣的圖像:

image1 http://7xsnr6.com2.z0.glb.clouddn.com/QQ%E5%9B%BE%E7%89%8720160509184009.jpg

圖片參考:

Jeff Yan, 微軟CAPTCHA的低成本攻擊

如果你想要每個x位置的黑色像素數,遵循你的代碼,這應該工作:

# Enumerate elements
for x in range(width):
    val = 0
    for y in range(height):
        val += (255-thresh[y, x])/255
        print y, x, val
    cv2.line(thresh, (x, height-val-1), (x, height-1), (0, 255, 0), 1)

所以基本上你是在x軸上循環,並且對於它的每個位置,找到y軸上的黑色像素量,它存儲在變量val 最后,您繪制一條高度等於val像素的線,在您從圖像底部開始循環的x位置。

希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM