이렇게 상자에 쓰여진 손으로 쓴 문자를 추출하고 싶습니다. 문서에서 가져온 이미지에서 테두리를 제거하는 방법 (MNIST 필기체 문자와 같은)?
저는 29 픽셀의 너비의 사각형을 추출하고 있습니다.이 사각형은 나에게 이런 이미지를줍니다.
올바르게 문자를 인식하기 위해, 각각의 캐릭터 이미지는 매우 깨끗합니다. 이와 같이, 나는이 일을하고 무엇,
- 계산 수평 및 수직 투사 모든 이미지의 .
두 배열의 각 요소를 반복합니다. 투영 값이 특정 임계 값보다 큰 경우 경계를 만났음을 의미합니다. 테두리 주위의 공백을 제거합니다.
그런 다음 이미지에서 윤곽을 찾습니다.
- 등고선 영역이 특정 임계 값보다 큰 경우. 경계의 구형을 취득 해 절단합니다.
하지만 문제는 정확하지 않습니다. 경우에 따라 정상적으로 작동하지만 대부분의 경우 비참하게 실패합니다. 이
또한 투영 값이 이미지 (또는이 이미지에 가까운 화상)에 매우 특정 같이 이미지를 생성한다. 그것은 잘 일반화되지 않습니다.
이 상황에서 잘 작동하는 다른 방법이 있습니까?
코드,
char = cv2.imread(image)
char_gray = cv2.cvtColor(char, cv2.COLOR_BGR2GRAY)
char_bw = cv2.adaptiveThreshold(char_gray, 255,
cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 9)
(rows, cols) = char_gray.shape
bit_not = cv2.bitwise_not(char_bw)
proj_h = cv2.reduce(bit_nv2.REDUCE_AVG)
proj_v = cv2.reduce(bit_not, 0, cv2.REDUCE_AVG)
thresh_h = 200
thresh_v = 100
start_x, start_y, end_x, end_y = 0, 0, cols - 1, rows - 1
#proj_h = proj_h[0]
proj_v = proj_v[0]
num_iter_h = cols // 8
num_iter_v = rows // 8
for _ in range(num_iter_h):
if proj_h[start_y][0] > 35:
start_y += 1
for _ in range(num_iter_h):
if proj_h[end_y][0] > 160:
end_y -= 1
for _ in range(num_iter_v):
if proj_v[start_x] > 15: #25:
start_x += 1
for _ in range(num_iter_v):
if proj_v[end_x] > 125:
end_x -= 1
print('processing.. %s.png' % idx)
output_char = char[start_y:end_y, start_x:end_x]
output_char = get_cropped_char(output_char)
return output_char
def get_cropped_char(img):
"""
Returns Grayscale cropped image
"""
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(img, (3,3), 0)
thresh = cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 75, 10)
im2, cnts, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contour = None
for c in cnts:
area = cv2.contourArea(c)
if area > 100:
contour = c
if contour is None: return None
(x, y, w, h) = cv2.boundingRect(contour)
img = img[y:y+h, x:x+w]
return img
침식 수술에 대해 이야기하고 있습니까? – Arka
예, 알았습니다. – Silencer
와우. 그것은 정확하게하고 싶습니다. 그러나 침식 후에. 상자는 어떻게 분리합니까? – Arka