일단 화면 구성은 아래와 같이 하였다. 왼쪽 이미지 리스트에서 파일을 선택하면 가운데 이미지가 나오고 오른쪽에 텍스트가 나오도록 그리고 아래쪽은 동작에 따른 로그를 출력할 계획이다. 우선은 프로젝트를 생성해주고 이전에 챙겨놨던 것들을 포함시켜 준다. 사실 안되는 것들때문에 이것 저것 추가하다보니 다 추가해버렸는데 이젠 모르겠다 ㅎㅎ 라이브러리들도 챙겨 넣고! 죄다 넣었다!! Ctranslator.h #pragma once #include "tesseract/baseapi.h" #include "leptonica/allheaders.h" #include "opencv2/opencv.hpp" class CTranslator { private: tesseract::TessBaseAPI* _Api; tesseract::Tesseract* m_API; public: CTranslator(); ~CTranslator(); void CreateTesseract(); bool Translate(cv::Mat Img, CString& strOut); }; 이왕 만드는거 클래스로 ㅋㅋ 근데 여기 C++ 소스는 배경화면이 안변하네 파이썬 소스는 뒤에 검게 변하더니... CTranslator::CTranslator() { _Api = nullptr; CreateTesseract(); } 생성자에서 초기화하는 함수 호출! void CTranslator::CreateTesseract() { if(_Api == nullptr) _Api = new tesseract...
리스트 로그 처럼 계속 문자열을 받아서 추가하는 함수는 컨트롤은 에디트 컨트롤을 사용하고 ReplaceSel() 를 이용해서 계속 문자열을 넣도록 하자 { CString str; // 문자열을 저장할 변수 m_edtLoggingOut.SetSel(-2, -1); // 커서를 에디트박스 끝으로 이동 or int len = m_edtLoggingOut.GetWindowTextLength(); // 글자 길이를 받아오기 m_edtLoggingOut.SetSel(len, len); // 글자 길이만큼 커서 이동 m_edtLoggingOut.ReplaceSel(str); // 에디트 박스에 글자 추가 } 요렇게 하면 계속 글자를 추가 할 수 있다.
두 점간의 각도를 구하는 방법을 검색하면 거의 대부분의 글에서 atan2 함수를 사용하여 그 각도를 구하라고 한다. #include <cmath> BOOL CalculateAngle(CPoint pt1, CPoint pt2, double& dAngle) { BOOL bResult = FALSE; if (pt1 != pt2) { dAngle = atan2(pt2.y - pt1.y, pt2.x - pt1.x); dAngle *= (180.0 / M_PI); bResult = TRUE; } return bResult; } 이런 글을 보고 만든 함수가 위의 함수이다. 같은 포인트가 아닐 시 atan2 함수를 사용하여 각도를 구하고 그 결과값이 라디안 값이니 degree 값으로 바꾸는 함수이다. 이 함수를 사용해서 이미지 상 두 점의 각도를 구하니 계속 부호가 반대로 나오는 것이었다. 다음과 같이 이미지 상에 두 점 A, B가 있다고 하자 그럼 보통 우리가 생각하는 x,y 2차원 좌표상엔 B 점의 y 값이 높다. 원점(영점)이 좌하단에 위치하기 때문이다. 하지만 이미지를 다룰땐 이와 반대로 좌상단에 원점(영점)이 존재한다. 따라서 위와 같은 함수 식으론 계속 부호가 반대로 나오게 되는 것이다. A 좌표를 (100, 70) 이라 한다면 B 좌표는 (200, 40) 정도가 되어 atan2(-30, 100) 이라는 값이 들어가 마이너스 부호가 나오는 것이었다. 이미지의 특징을 생각 못한 것이었다. 따라서 함수를 다시 만들자면 ...
댓글
댓글 쓰기