[작업환경]

openCV버전 : openCV 2.4.10

VS 버전 : vs2010

Debug ver.


[openCV 설치 방법]

1. openCV 다운로드

2.4.10 버전으로 다운로드

http://opencv.org/downloads.html


2. 환경변수 설정

1) 시스템 변수 -> 새로 만들기

변수 이름 : OPENCV_2_4_10_BUILD

변수 값 : D:\Program Files (x86)\openCV_2.4.10 (CV 설치한 경로) \opencv\build


2) 시스템 변수 -> 새로 만들기

변수 이름 : OPENCV_X86

변수 값 : %OPENCV_2_4_10_BUILD%\x86\vc10\bin


3) 시스템 변수 -> 새로 만들기

변수 이름 : OPENCV_X64

변수 값 : %OPENCV_2_4_10_BUILD%\x64\vc10\bin


4) 시스템 변수 -> path

맨 뒤에 ;%OPENCV_X86%;%OPENCV_X64%; 추가


5) 재부팅


3. VS 2010 설정

1) 구성 속성 -> C/C++ -> 일반 -> 추가 포함 디렉터리

$(OPENCV_2_4_10_BUILD)\include


2) 링커 -> 일반 -> 추가 라이브러리 디렉터리

$(OPENCV_2_4_10_BUILD)\x86\vc10\lib


3) 링커 -> 입력 -> 추가 종속성

opencv_calib3d2410d.lib

opencv_contrib2410d.lib

opencv_core2410d.lib

opencv_features2d2410d.lib

opencv_flann2410d.lib

opencv_gpu2410d.lib

opencv_highgui2410d.lib

opencv_imgproc2410d.lib

opencv_legacy2410d.lib

opencv_ml2410d.lib

opencv_nonfree2410d.lib

opencv_objdetect2410d.lib

opencv_ocl2410d.lib

opencv_photo2410d.lib

opencv_stitching2410d.lib

opencv_superres2410d.lib

opencv_ts2410d.lib

opencv_video2410d.lib

opencv_videostab2410d.lib




파일이나 폴더 불러오기 할 때

img = cv::imread("D:\image\Koala.jpg", CV_LOAD_IMAGE_COLOR); 로 경로에 \ 하나만 쓰면 불러오지 못하고 경고를 뱉어낸다.


경로에 \를 두개 써주면 해결됨!

img = cv::imread("D:\\image\\Koala.jpg", CV_LOAD_IMAGE_COLOR);


\\ 두번을 해줘야 출력이 \ 하나로 나오니까!

public Vector3 normalized;


해당 벡터의 magnitude(벡터의 길이)가 1인 벡터를 반환(읽기전용)

벡터가 정규화(normalized)되면, 벡터는 갖은 방향값을 갖지만, 정규화 벡터의 길이는 1.0이 됨


**현재 벡터가 변화하지 않고 새로운 정규화 벡터가 반환된다는 점을 주의

**현재 벡터를 정규화 하고 싶은 경우에는 Normalize 함수 사용


해당 벡터가 정규화되기에 너무 작은 경우에 0 벡터가 반환


https://docs.unity3d.com/kr/current/ScriptReference/Vector3-normalized.html


-----------------------------------------------------------------------------------------------------------------------------------------------------


public float magnitude;


벡터의 길이를 반환(읽기전용)

- 벡터의 길이는 (x*x+y*y+z*z)의 제곱근


일부 벡터의 길이만 비교하는 경우에, sqrMagnitude를 사용해서 길이의 제곱값을 비교할 수 있음(길이의 제곱값을 사용하는 경우가 더 빠릅니다.)


https://docs.unity3d.com/kr/current/ScriptReference/Vector3-magnitude.html


단방향 연결 리스트와 순환 연결 리스트는 보통 헤드 포인터를 사용한다.

헤드 포인터는 연결리스트의 맨 처음 노드인 시작 노드를 가리킨다.


이중 연결 리스트는 양방향으로 연결되어 있는 리스트이므로 2가지 포인터를 사용한다.

다음 노드는 물론 이전 노드까지 접근 가능한 리스트이다.

이중 연결 리스트는 헤더 노드를 사용하는데 노드 자체를 사용하여 추가와 삭제를 용이하게 한다.

헤더 노드는 리스트의 첫번째 노드와 마지막 노드를 가리키는 포인터 값을 가진다.


왜 이중 연결 리스트는 헤더 노드를 사용해야 할까?

이중 연결 리스트는 pNode==pNode->pLLink->pRLink==pNode->pRLink->pLLink를 만족해야 한다.

만약 헤드 포인터를 사용하게 되면 pNode가 첫번째 노드일 경우에 pNode->pLLink는 노드가 아닌 단순한 헤드 포인터이므로(노드만 가리키는 포인터이므로) pNode->pLLink->pRLink가 성립될 수 없다. 노드의 추가와 삭제시에 고려해야 할 점이 늘어나므로 헤드 포인터가 아닌 헤더 노드로 구현하는 것





http://web.skhu.ac.kr/~mckim1/Lecture/DS/dna/class04/class04_05.html

'자료구조' 카테고리의 다른 글

정렬 알고리즘에 대한 용어?  (0) 2016.06.11
[C++자료구조론] 1. 성능분석과 측정  (0) 2016.03.03

Application의 LoadLevel보다 SceneManager의 LoadScene 사용



https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadScene.html

일반 자료형(int, char, short, string, System.Object 등)은 const를 사용해서 상수화 가능

그러나 클래스/구조체/배열 등과 같은 사용자 정의 형식은 const를 사용할 수 없음(readonly로 상수화 가능)


const 사용시 static이지만 readonly는 static이 아니므로 선언시 작성해주어야 함


const는 선언과 동시에 초기화 해야 하지만 readonly는 선언시/생성자 초기화할 수 있음

const는 컴파일 타임 상수/readonly는 런타임 상수로도 사용 가능


https://msdn.microsoft.com/ko-kr/library/acdd6hb7.aspx

https://msdn.microsoft.com/ko-kr/library/ms173119.aspx



1. 예증법 : 특정한 사례들을 나열한 뒤 그 안에서 일반적인 규칙을 찾는다.

2. 패턴 매칭 : 풀어야 할 알고리즘과 비슷한 문제를 생각해내고 비슷한 문제의 풀이법을 수정하여 풀어야 할 알고리즘을 만들어낸다.

3. 단순화와 일반화 : 문제를 단순화하여 푼 뒤, 알고리즘이 구해지면 일반화

4. 초기 사례로부터의 확장 : n=1, n=2, n=3,... 식으로 확장하여 규칙을 찾아낸다. 보통 재귀 알고리즘으로 구현된다.

5. 자료구조 브레인스토밍 : 자료구조들을 차례차례 적용해보고 해결되는지 본다. 

기술 문제를 푸는 다섯 단계


1. 문제의 모호한 점에 대하여 면접관에게 질문을 한다.

-명확하지 않은 부분에 대해 질문

-좋은 질문 : 자료형은 무엇인가?/데이터의 양은?/어떤 가정을 해야하는가?/사용자는 누구인가?


2. 알고리즘을 설계한다.

-시간과 공간복잡도는?

-데이터가 많아지면 어떻게 되는가?

-내 설계로 인해 다른 문제가 발생하지 않는가?(변형 이진 탐색 트리를 만들었을 경우 나의 설계가 기존의 삽입, 탐색, 삭제 시간에 영향을 미치지는 않는가?)

-다른 이슈나 한계점이 있다면 적절한 타협안을 만들었는가? 타협안이 최적으로 동작하지 않는 시나리오는?

-데이터의 특징이 명시되어 있다면 그 특징을 활용하였는가?

-처음부터 완벽할 수 없으니 시작 코드를 최적화시켜 나가면 됨


3. 가상코드(수도코드)를 먼저 작성한다.

-면접관에게 후에 코드로 변환할 것이라 알리는 것이 좋음


4. 코드를 작성한다.

-자료구조를 충분히 활용 : 기존의 자료구조를 활용하거나 스스로 정의하여 사용

-코드가 복잡하게 보이지 않도록 : 정중앙부터 써내려가지 말고 왼쪽 위부터


5. 코드를 테스트하고, 오류를 교정한다.

-테스트 경우

      • 극단적인 경우 : 0, null, 음수, 최댓값, 최솟값
      • 사용자 실수 : 올바른 값의 입력이 아닌 이상한 값(null, 음수, ...)
      • 일반적인 경우

-알고리즘이 복잡하거나 복잡한 연산이 포함되어 있다면 코딩 도중에 테스트해볼 것

-실수 발견시 왜 그 버그가 발생하게 됐는지 이유를 찾을 것(깊이 생각하고 수정해야 함)

제자리 정렬 알고리즘 : 정렬 시 추가적인 메모리를 필요로 하지 않는 정렬 알고리즘을 말함

  • 선택정렬/삽입정렬 - 제자리 정렬 알고리즘
  • 퀵정렬/머지정렬 - 제자리 정렬 알고리즘 X


불안정/안정 정렬 알고리즘 : 같은 값일 경우 정렬 순서가 기존의 순서와 일치하지 않고 바뀌는 알고리즘

  • 예를 들어 3, 2(1), 6, 8, 4, 2(2) 일 경우

불안정 정렬 알고리즘 : 2(2), 2(1), 3, 4, 6, 8

안정 정렬 알고리즘 : 2(1), 2(2), 3, 4, 6, 8

식으로 기존의 정렬 순서가 바뀌는 것을 불안정 정렬 알고리즘 이라고 함


  • 정렬 순서를 정하는 값을 키(key) 라고 함


http://answers.unity3d.com/questions/1067130/applicationloadlevel-changes-lighting-for-some-rea-1.html

+ Recent posts