Fogeaters, Light The World.

24

2016-Mar

[OpenCV] Mat 구조를 Tesseract 에서 쓸 수 있게

작성자: title: MoonBlonix IP ADRESS: *.148.87.98 조회 수: 1454

출처 :: http://with-computer.tistory.com/15

팀 프로젝트를 진행하다가 Input이 이미지나 Pix가 아닌 Mat으로 주어져야 하는 상황에 직면했다. TessBaseAPI는 Mat를 절대로 알아먹을 수 없기에 중간에 형변환하는 것은 피할 수 없는 선택이었고, 여러 가지 포럼을 찾아본 끝에 해답을 찾아냈다. StackOverflow에 나온 컨버팅 방법은 왜인지 GetUTF8Text에서 오류를 뿜어냈고(Pix로 변환하는 과정에서 몇 가지의 속성이 초기화되지 않은 것으로 보인다), 해답은 직접 TessBaseAPI에 SetImage를 해 주는 것이었다. 다음은 그 소스코드이다.

//
//  main.cpp
//  tesseractOCR
//
//  Created by SonodaUmi on 2015. 10. 21..
//  Copyright © 2015년 SonodaUmi. All rights reserved.
//



#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;
int _mat();
Pix *pixtes;
tesseract::TessBaseAPI api;


int main()
{
    char *outText;
    
    _mat();
    
    outText = api.GetUTF8Text();
    printf("OCR output:\n%s", outText);
    namedWindow( "Display window", WINDOW_AUTOSIZE );

    // 메모리 릴리즈
    api.End();
    delete [] outText;
    
    pixDestroy(&pixtes);
    
    return 0;
}

int _mat(){
        
    Mat image = imread("%__imagepath__", CV_LOAD_IMAGE_COLOR);   // 파일을 MAT에 입력

    printf("%d",  image.depth() == CV_8U);
    namedWindow( "Display window", WINDOW_AUTOSIZE );
    imshow( "Display window", image );
    // 이미지 로딩
    
    cv::Mat gray;
    cv::cvtColor(image, gray, CV_BGR2GRAY);
    // 개략적인 전처리
    
    // Tesseract API로 입력시킴. Pix자료형으로 바꿀 수 있을...까?
    api.Init(NULL, "eng", tesseract::OEM_DEFAULT);
    api.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);
    api.SetImage((uchar*)gray.data, gray.cols, gray.rows, 1, gray.cols);
    api.Recognize(0);
    waitKey(0);                
    
    return 0;

}
profile
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 [Web] 클라우드 IDE + 2 title: MoonBlonix 2017-06-25 15129
72 [VS] 다중 프로젝트 dll로 연결하기 title: MoonBlonix 2016-11-13 1627
71 [VS] DllMain 에서 DLL 호출하기 title: MoonBlonix 2016-11-13 1593
70 [Win API] 유니코드, 멀티바이트, TCHAR 문자열함수 title: MoonBlonix 2016-11-08 1459
69 [AVR] LED 입출력을 제어해보자 - 1 file title: Zwei츠바이 2016-09-16 1603
68 [알고리즘] 문자열 검색 title: MoonBlonix 2016-04-17 1701
67 [AVR] ATTiny13A 그리고 ADC에 대해 + 2 title: MoonBlonix 2016-04-01 1546
66 [OpenCV] 32bit(x86) 빌드 및 초기설정(GPU, TBB, IPP 등) title: MoonBlonix 2016-03-29 1545
65 [OpenCV] Mat 픽셀 접근방법 title: MoonBlonix 2016-03-26 1678
» [OpenCV] Mat 구조를 Tesseract 에서 쓸 수 있게 title: MoonBlonix 2016-03-24 1454
63 [영상처리] Bitmap 구조 분석 title: MoonBlonix 2016-03-24 1706
62 [OpenCV] 3.x - 캠 사용 & 얼굴 인식 title: MoonBlonix 2016-03-24 1683
61 [tesseract] (3.0.4) vs2013으로 빌드하기 title: MoonBlonix 2016-03-23 1607
60 [OpenCV] 3.1 설치하기 file title: MoonBlonix 2016-03-17 1426
59 AVR / ARM / DSP 비교 file + 2 title: MoonBlonix 2016-03-12 1738
58 (작성중)[OpenCV/ARM/DSP] 임베디드 환경에서의 OpenCV 사용 title: MoonBlonix 2016-03-12 1604
57 [OpenCV] 예제 코드 모음 file title: MoonBlonix 2016-03-12 1793
56 [OpenCV] 마커 추출 file title: MoonBlonix 2016-03-12 1407
55 [OpenCV] 영상 이진화 & 레이블링(Blob Labeling) file + 3 title: MoonBlonix 2016-03-12 1537
54 [OpenCV] 문자 인식 file + 1 title: MoonBlonix 2016-03-12 1468
53 [AVR] ATTiny13A 에 대한 숨겨진 사실들 title: MoonBlonix 2016-03-10 1630