2017-10-02 8 views
0

나는 세 가지 다른 필기구로 촬영 필기의 다음 샘플 한 : OpenCV의 & C를 사용하여 이미지에서 잉크 스트로크의 폭을 찾기 ++

enter image description here

가 작성 보면, 내가 말할 수있다 처음 두 사람과 마지막 사람 사이에 뚜렷한 차이가 있습니다. 내 목표는 각 문자에 대한 획 두께의 근사값을 결정하여 얇거나 두꺼운 것을 기준으로 그룹화 할 수있게하는 것입니다.

지금까지 나는 stroke width transform을 조사해 보았지만 그것을 예제로 번역하는 데 어려움을 겪었습니다.

이미지의 전처리를 할 수있어서 문제의 윤곽 만 남았습니다.

enter image description here

+0

이 값은 스트로크 폭 변환을위한 완벽한 사용 사례입니다. 아마도 당신이 당신의 시도를 다른 질문으로 게시했다면 그것을 구현하는 데 도움을 줄 수 있을까요? 물론이 문제를 시도하는 다른 방법이 있습니다. 카밀의 대답은 당신이 쉽게 시도하고 볼 수있는 방법이라고 생각합니다. 그러나 스트로크 너비 변환은 실제로 작동하는 한 실제로 실제로 잘 작동합니다. –

+0

@AlexanderReynolds 제안에 감사드립니다. 나는 사람들이 온라인에 게시 한 다른 예제를 찾고 SWT를 조사하면서 공정한 시간을 보냈으며 주로 프로젝트에 너비 계산 만 추출하려고했습니다. 그러나 정확한 값은 필요하지 않기 때문에 좀 더 가벼운 접근 방법을 원했습니다. SWT가 다른 응용 분야에 매우 유망 해 보이기 때문에 앞으로 SWT를 탐구하고 싶습니다. – CodeBender

답변

1

나는 당신이하고있는 것처럼 cv::findContours으로 윤곽을 감지 제안하고 사각형 영역과 윤곽 영역 경계 비교 예를 들어, 여기에 마지막 줄에서 두께입니다. 두꺼운 글씨가 더 큰 coefficent (contourArea/boundingRectArea)가됩니다.

+0

나는이 접근법을 정말 좋아합니다. 특히 OP는 단순히 그룹화에 관심이 있기 때문에 값이 두껍고 얇은 문자와 충분히 다르면 중요하지 않습니다. 윤곽선을 사용하는 것이 더 좋을 것이라고 생각하십니까? 물론 윤곽선을 부드럽게 만들기 위해 윤곽선 근사를하고 싶을 것입니다. 면적이 크지 만 큰 경계 상자가있는 경우와 비교할 때 면적이 클 수 있지만 경계 상자가 더 강하게 맞았을 때와 비교할 때를 생각하고 있습니다. 예 : L과 M은 비슷한 크기의 경계 상자를 만들지 만 크게 다른 영역을 만들 수 있습니다. –

+0

어쩌면 숱이 나고 주변부가 조금 더 좋아질 것입니다. –

+0

@KamilSzelag 고마워, 나는이 접근법을 사용하여 원하는 것을 얻을 수있었습니다. 먼저 이미지를 그레이 스케일로 변환 한 다음 findContours로 변환 한 다음 극단을 필터링 한 다음 계수를 계산해야했습니다. 희석이나 침식에 관한 한, 연필과 같은가는 선에서는 문제가 될 수 있습니다. – CodeBender