3

두 개의 텍스트 블록을 포함하는 이미지 (* .png)가 있습니다. python27에서 파이썬 이미징 라이브러리 (PIL)를 사용하여 각 텍스트 블록을 개별적으로 가져 오려고합니다.python 및 PIL 사용 이미지의 텍스트 블록을 캡처하는 방법은 무엇입니까?

이미지를 흐리게 처리 한 다음 흐리게 처리 된 블록의 가장자리를 찾아서 각 블록의 경계를 복구 할 수있게했습니다 (나중에 "자르기"와 함께 사용하기 위해). 그러나 이미지를 흐릿하게 만들 때 (필자는 여러 번 반복 해 보았습니다.) "find_edges"필터는 단순히 각 문자의 가장자리를 잡는 것처럼 보입니다.

pic = Image.open("a.jpg") 
out = pic.filter(ImageFilter.BLUR) 
out = out.filter(ImageFilter.FIND_EDGES) 

나는 포토샵 "자석 올가미 도구"와 비슷한 것을 찾고 있다고 생각합니다. 어떤 접근 방식이 더 좋을지 아십니까?

+0

예, PIL의 가장자리 찾기 필터는 Photoshop에서 같은 이름과 같습니다. 이미지에서 감지 된 모서리를 추적합니다. 솔리드 모양이 윤곽선으로 바뀝니다. – kindall

+0

그게 내가 한거야, 그러나 나는 (블러 링에도 불구하고) 현재 일어나고있는 각각의 개인적인 성격보다는 전체 텍스트 블록을 개설하고 싶다. – user714852

+0

그리고 가장자리에서 경계 상자를 가져 오는 함수를 만드는 방법은 무엇입니까? 만약 당신이 후자의 좌표를 가지고 있다면, extrema를 가질 수 있습니다. – jlengrand

답변

12

하나의 축에 투사 된 이미지의 히스토그램을 작성하면됩니다. 이미지, crop to the outer bounding box first 가져 가라. y 축 상에 투영 히스토그램의 예 : 여기서

from PIL import Image 
import numpy as np 

im = Image.open("dummytext.png") 
pix = np.asarray(im) 
pix = pix[:,:,0:3] # Drop the alpha channel 
pix = 255 - pix # Invert the image 
H = pix.sum(axis=2).sum(axis=1) # Sum the colors, then the y-axis 

enter image description here

은 공백의 큰 블록을 식별한다. 이것은 분할 할 최적의 y 좌표를 결정합니다. 위의 히스토그램에서 이것이 얼마나 명백한 지 주목하십시오. 두 텍스트 블록이 서로 가깝다면 더 나은 기준이 필요하며 필요에 맞게 메서드를 적용하십시오. 분할되면 이미지를 개별적으로자를 수 있습니다.

+0

멋진 게시글 - 답변으로 받아 들여 졌을 것입니다! – srking

+0

@srking 감사합니다. 도움이 되었기 때문에 기쁩니다. 나는 수용에 대해 너무 걱정하지 않는다. 그것은 upvotes가있는 것이다. – Hooked

관련 문제