Programming

street view 1.0 cmd

 2015. 7. 17. 16:12
반응형

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <iostream>

#include <fstream> // c++ 에서 파일 읽기

#include <conio.h> // 방향키 읽기


#include <opencv2\core\core.hpp>

#include <opencv2\highgui\highgui.hpp>


#define MAX_PICTURE 8


using namespace std;

using namespace cv;


void showRelation(int(*map)[4]);

int getDirection(int inputKey);

int getAsciiDirection(int inputKey);

String getFileName(int fileIndex);


const char* win_name = "STREET VIEW ver1.0";


int main(){


//위치 관계 정보 초기화

//int map[MAX_PICTURE][4] = { { -1, -1, -1, 1 }, { 5, -1, 0, 2 }, { -1, -1, 1, 3 }, { -1, -1, 2, 4 }, { -1, -1, 3, -1 }, { 6, 1, -1, -1 }, { 7, 5, -1, -1 }, { -1, 6, -1, -1 } }; //실외 관계도

int map[MAX_PICTURE][4] = { { 1, -1, -1, -1 }, { -1, 0, 2, -1 }, { -1, -1, 3, 1 }, { -1, -1, 4, 2 }, { -1, -1, -1, 3 } }; //실내 관계도

//변수 초기화

int index = 0;

showRelation(map);

int indexNum = 0;

char keyDirection = ' ';


//인덱스 받고 첫화면

cout << "input index number : ";

cin >> indexNum;

if ((MAX_PICTURE < indexNum) || (indexNum < 0)){

cout << "Error : out of range !" <<endl;

cout << "You have to input just 0 < input < "<<  MAX_PICTURE << endl;

return -1;

}

Mat streetImage = imread(getFileName(indexNum));

imshow(win_name, streetImage);

waitKey(30);


//방향으로 이동하기

int dir = -1;

int tempDir = -1;

while (keyDirection != '\n'){

system("cls"); //화면 지우기

showRelation(map); // 관계표 띄워주기

cout << "current index : " << indexNum << endl;

cout << "input direction (e/w/s/n) : ";

cin >> keyDirection;

dir = getDirection(keyDirection);

if (map[indexNum][dir] != -1){ // 가고자 하는 방향에 사진이 있을 때만

indexNum = map[indexNum][dir]; //indexNUm에 그 사진 index 넣어주기

streetImage = imread(getFileName(indexNum) , 1);

imshow(win_name, streetImage);

}

waitKey(30);

}


//종료

destroyAllWindows();

return 0;

}



// jpg 파일 이름 받아오기

String getFileName(int fileIndex){

char temp[64];

char buf[128];

char extension[5] = ".jpg";

itoa(fileIndex, buf, 10);

strcat(buf, extension);

String dst = buf;

//cout << buf << endl;

return dst;

}


// index들의 관계 보여주기

void showRelation(int (*map)[4]){

cout << "########### STREET VIEW ver1.0 ##########" << endl;

cout << "#index\t동\t서\t남\t북\t#" << endl;


for (int i = 0; i < MAX_PICTURE; i++){

cout << "# " << i << '\t';

for (int j = 0; j < 4; j++){

cout << map[i][j] << '\t';

}

cout << "#" << endl;

}

cout << "#########################################" << endl;

}


// ewsn 받아서 방향으로 바꿔주기

int getDirection(int inputKey){


int dir;

switch (inputKey)

{

case 'e':

dir = 0;

break;

case 'w':

dir = 1;

break;

case 's':

dir = 2;

break;

case 'n':

dir = 3;

break;

default:

dir = NULL;

break;

}

return dir;

}


// 방향키로 방향 받아오기 ( 미완성 )

int getAsciiDirection(int inputKey){

int dir;

switch (inputKey)

{

case 77: // 동

dir = 0;

break;

case 75: //서

dir = 1;

break;

case 80: //남

dir = 2;

break;

case 72: //북

dir = 3;

break;


default:

dir = NULL;

break;

}

return dir;

}


반응형