2014-01-15 167 views
2

更新**嘗試添加一些代碼似乎有道理,但仍然沒有給我想要的效果。OpenCV裁剪矩形

你好,我有興趣修剪ALL OF圖像的內容我能夠使用OpenCV的矩形函數進行隔離。一旦我這樣做,我希望能夠將裁剪內容應用於白色背景。

這是我原來的圖像

2

我已經能夠使用矩形隔離的圖像低於:

1

我使用至今的代碼是如下:

import numpy as np 
import cv2 

im = cv2.imread('1.jpg') 
im3 = im.copy() 

gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) 
blur = cv2.GaussianBlur(gray,(5,5),0) 
thresh = cv2.adaptiveThreshold(blur,255,1,1,11,2) 




contours,hierarchy = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 

squares = [] 

for cnt in contours: 
    if cv2.contourArea(cnt)>50: 
     [x,y,w,h] = cv2.boundingRect(cnt) 

     if h>28 and h<35: 
      cv2.rectangle(im,(x,y),(x+w,y+h),(0,0,255),2) 
      cv2.imwrite('norm1.jpg',im) 
crop_img = [[[255, 255, 255] for x in xrange(377)] for x in xrange(377) ] #newly added code starts here 
for s in squares: 
    s = squares[0] 
    x = s[0] 
    y = s[1] 
    w = s[2] 
    h = s[3] 
    img = im[y:y+h,x:x+w] 
      for col in range(y,y+h): 
       for row in range(x,x+w): 
        if img[col - y][row - x].tolist() == [0,0,0]: 
         crop_img[col][row] = [0,0,0] 


cv2.imwrite("cropped.jpg", np.array(crop_img)) 

我添加的新代碼導致此輸出。

3

如在代碼看出上述我嘗試添加所有矩形的座標到一個數組,然後試圖進行迭代和編譯它們到單個的圖像。理論上我認爲這應該起作用,但它沒有給我想要的結果。任何幫助將不勝感激

謝謝!

回答

0

說得簡單:沒有父母的輪廓是外輪廓。

回答this question可能會幫助您瞭解如何使用此「層次結構」。代碼存在於C++中,但在Python中應該類似。