2014-01-16 2 views
1

после попытки обрезать изображение в нескольких местах, сохраняя список координат в массиве, буквы в обрезанной области становятся чрезвычайно размытыми, и я не могу понять, почему.Письма размытые/нечеткие после функции урожая

Исходное изображение выглядит

1

После обрезки изображение выглядит

2

Код в вопросах заключается в следующем:

import numpy as np 
import cv2 

im2 = cv2.imread('1.jpg') 
im = im2.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<34: 
      rect = (cv2.rectangle(im,(x,y),(x+w,y+h),(255,255,255),3)) 
      squares.append(cv2.boundingRect(cnt)) 
      cv2.imwrite('norm1.jpg',im) 

crop_img = [[[255, 255, 255] for x in xrange(377)] for x in xrange(377) ] 

for s in squares: 
    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)) 

Любая помощь Wou ld будем очень благодарны!

+0

В коде, который переменный является первым и каким переменным является вторым. Также я не уверен, но проверьте, не изменился ли ваш тип данных. –

+0

Привет, Абид. Я не уверен, что вы подразумеваете под «первым и вторым», но я знаю, что мой тип данных изменяется в строке «if img [col-y] [row-x] .tolist() == [0,0, 0]: «Мне пришлось использовать функцию .tolist, потому что она выдавала ошибку: ValueError: значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any() или a.all(). Я надеюсь, что это прояснит некоторые из них. Благодаря! – JamesLLee

+0

Ох ... Прошу прощения, я хотел спросить: «В вашем коде, какая переменная - это первое изображение в вашем вопросе и какая переменная - второе изображение». –

ответ

1
import numpy as np 
import cv2 
import matplotlib.pyplot as plt 

im2 = cv2.imread('norm1_zps89266edb.jpg') 
im = im2.copy() 

gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) 
blur = cv2.GaussianBlur(gray,(5,5),0) 
ret3,thresh = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) 

#we ony want the external contours 
contours,hierarchy = cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) 
#extract the countours with area > 50 
squares = [cnt for cnt in contours if cv2.contourArea(cnt) > 50] 

#mask array with the same shape as img (but only 1 channel) 
mask = np.zeros((im.shape[0], im.shape[1])) 
#draw the contours filled with 255 values. 
cv2.drawContours(mask,squares,-1,255,-1) 

newImage = np.where(mask==255, thresh, 255) 

plt.imshow(newImage) 
plt.show() 

cv2.imwrite("cropped.jpg", newImage) 

выход:
http://i44.tinypic.com/8yak93.jpg

+0

удивительный! большое спасибо – JamesLLee

Смежные вопросы