2016-05-09 93 views
1

我是Python的新手。Python + OpenCV:枚舉矩陣

我想從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) 

如果我直接枚舉閾墊等

for y, x in enumerate(thresh): 

我只能從外y軸的枚舉第一然後枚舉x軸。那麼我怎樣才能做到這一點? 我的目標是得到這樣的形象:

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

圖片引用:

傑夫顏,在微軟CAPTCHA

回答

0

低成本攻擊如果你要的號碼黑色像素爲每個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位置。

希望這有助於!