//내가 opencv를 사용해서 수화번역을 하는데 지금 거의 마지막 단계에서 헤매고 있는데 먼저 수화영상의 손모양 정보(수화동영상)를 통해 글자로 표현하는건데 이 소스를 어캐 실행시키는게 좋을까...
#include "custom.h"
/*
CvPoint center;
CvPoint far_distance;
CvPoint first;
CvPoint second;
CvPoint third;
*/
//동영상 내용인 '감사합니다' 를 해석해야함
extern CvPoint center;
extern CvPoint far_distance;
extern CvPoint first;
extern CvPoint second;
extern CvPoint third;
extern CvPoint forth;
extern IplImage* image0;
int timer = 40;
void translate()
{
//변수 초기화
double x[4], y[4];
double distance[4], angle[4];
double under[4], upper[4], div[4];
for (int i = 0; i
{
distance[i] = 0.0;
angle[i] = 0.0;
x[i] = 0.0;
y[i] = 0.0;
under[i] = 0.0;
upper[i] = 0.0;
div[i] = 0.0;
}
//각 점의 거리와 각도 구하는 소스
distance[0] = sqrt((double)((center.x - first.x) * (center.x - first.x)
+ (center.y - first.y) * (center.y - first.y)));
distance[1] = sqrt((double)((center.x - second.x) * (center.x - second.x)
+ (center.y - second.y) * (center.y - second.y)));
distance[2] = sqrt((double)((center.x - third.x) * (center.x - third.x)
+ (center.y - third.y) * (center.y - third.y)));
distance[3] = sqrt((double)((center.x - forth.x) * (center.x - forth.x)
+ (center.y - forth.y) * (center.y - forth.y)));
//거리 끝
//center 점을 원점으로 정한후 각점 좌표 이동.
x[0] = first.x - center.x; y[0] = first.y - center.y;
x[1] = second.x - center.x; y[1] = second.y - center.y;
x[2] = third.x - center.x; y[2] = third.y - center.y;
x[3] = forth.x - center.x; y[3] = forth.y - center.y;
if (timer <= 0)
{
for (int j = 0; j
{
under[j] = distance[0] * distance[j];
upper[j] = (x[0] * x[j]) + (y[0] * y[j]);
div[j] = upper[j] / under[j];
angle[j] = acos(div[j]) * 57.2958; //라디안을 도(degree)로 변환
//printf("angle %lf\n"s,angle[i]);
}
//값 출력
for (int m = 0; m
printf("distance : %f, angle : %f\n", distance[m], angle[m]);
printf("\n");
timer = 52;
}
else timer--;
////ㄱ 해석
if (distance[0] > 150 && distance[0]
if (distance[1] > 96 && distance[1]
if (distance[2] > 175 && distance[2]
if (distance[3] > 119 && distance[3]
if (angle[1] > 171 && angle[1]
if (angle[2] > 142 && angle[2]
if (angle[3] > 79 && angle[3]
printf("ㄱ");
////ㅏ 해석
if (distance[0] > 77 && distance[0]
if (distance[1] > 149 && distance[1]
if (distance[2] > 258 && distance[2]
if (distance[3] > 40 && distance[3]
if (angle[1] > 114 && angle[1]
if (angle[2] > 64 && angle[2]
if (angle[3] > 143 && angle[3]
printf("ㅏ");
////ㅁ 해석
if (distance[0] > 94 && distance[0]
if (distance[1] > 115 && distance[1]
if (distance[2] > 248 && distance[2]
if (distance[3] > 34 && distance[3]
if (angle[1] > 121 && angle[1]
if (angle[2] > 56 && angle[2]
if (angle[3] > 117 && angle[3]
printf("ㅁ");
////ㅅ 해석
if (distance[0] > 160 && distance[0]
if (distance[1] > 74 && distance[1]
if (distance[2] > 160 && distance[2]
if (distance[3] > 140 && distance[3]
if (angle[1] > 166 && angle[1]
if (angle[2] > 0 && angle[2]
if (angle[3] > 64 && angle[3]
printf("ㅅ");
////ㅎ 해석
if (distance[0] > 66 && distance[0]
if (distance[1] > 129 && distance[1]
if (distance[2] > 201 && distance[2]
if (distance[3] > 93 && distance[3]
if (angle[1] > 162 && angle[1]
if (angle[2] > 71 && angle[2]
if (angle[3] > 131 && angle[3]
printf("ㅎ");
////ㅂ 해석
if (distance[0] > 82 && distance[0]
if (distance[1] > 204 && distance[1]
if (distance[2] > 106 && distance[2]
if (distance[3] > 127 && distance[3]
if (angle[1] > 171 && angle[1]
if (angle[2] > 33 && angle[2]
if (angle[3] > 99 && angle[3]
printf("ㅂ");
////ㄴ 해석
if (distance[0] > 174 && distance[0]
if (distance[1] > 67 && distance[1]
if (distance[2] > 176 && distance[2]
if (distance[3] > 119 && distance[3]
if (angle[1] > 157 && angle[1]
if (angle[2] > 1 && angle[2]
if (angle[3] > 81 && angle[3]
printf("ㄴ");
////ㄷ 해석
if (distance[0] > 88 && distance[0]
if (distance[1] > 171 && distance[1]
if (distance[2] > 185 && distance[2]
if (distance[3] > 163 && distance[3]
if (angle[1] > 170 && angle[1]
if (angle[2] > 60 && angle[2]
if (angle[3] > 158 && angle[3]
printf("ㄷ");
}
댓글 0