[ 언어 및 문법 ]
[C++, OpenCV] Convert Arr2Mat, Mat2Arr / 16bit(short) to 8bit(unsigned char) / CV_type
Convert Arr to Mat short* psImage; Mat psImage_mat(nWidth, nHeight, CV_16SC1, psImage); Convert Mat to Arr short* psImage_arr = (short*)psImage_mat.data; Convert 16bit(short) to 8bit(unsigned char) normalization Mat img(row, col, CV_16SC1); // 16bit(short) Mat img_8UC1 = img.clone(); // get min, max double minVal; double maxVal; Point minLoc; Point maxLoc; minMaxLoc(img, &minVal, &maxVal, &minLo..
[C++] 2차원 배열 동적 할당, 해제, 초기화
💡 동적 메모리를 할당받은 포인터 변수를 할당받기 전과 해제한 후에 NULL을 대입하여 메모리 접근 오류를 방지! 💡 2차원 배열을 동적 할당으로 열었을 경우엔 다음과 같이 "초기화" 및 "할당" 후 "해제" 시켜주자! // 포인터 선언 및 초기화 short** ppsImages = NULL; // NULL로 초기화 꼭 해주고 할당 및 해제! // 메모리 할당 short** ppsImage = new short*[nHeight]; for (int row = 0; row < nHeight; row++){ ppsImage[row] = new short[nWidth]; // 각 행의 열 값들도 동적 할당 (메모리 열기) memset(ppsImage[row], 0, sizeof(short)*nWidth); //..
[C++] 전방 선언 (Forward Declaration)
A 클래스가 a.h라는 헤더파일에 있고, B 클래스가 b.h라는 헤더파일에 있는데 A에서도 B를 사용하고, B에서도 A를 사용할 때.. 서로 #include를 둘 다 해서 헤더 꼬임 현상이 발생하면 무한 루프에 빠지게 되는데, (컴파일 속도도 저하됨) 이 때 전방 선언 사용! 전방 선언 사용법 한 파일(ex. "b.h")에서 #include "a.h" 대신, class A; 라고 선언! cf. 참고 [c++] 클래스 전방 선언(Forward declarations)와 상호 참조 헤더 파일 class A 가 a.h에 있고 class B 가 b.h 에 있는데 B가 A를 사용하고 A가 B를 사용할 경우 : 거의 설계가 잘 못되었다고 볼 수 있다. 이렇게 프로그램을 짜면 이해하기가 힘들고 추적이 힘들기 때문에 ..
[C++] 정적 변수(Static) vs 전역 변수(Global) , const
공통점 (지역 변수와 달리) 프로그램이 끝날 때까지 할당된 변수의 값과 메모리가 유지됨. 차이점 정적 변수 (Static Variable) 선언된 해당 파일, 함수 내에서만 접근 가능 ==> 내부 링크 초기화는 단 한번만 가능 (소스 파일에서만 초기화 가능) 선언 시 : static 키워드를 반드시 사용해야 함 전역 변수 (Global Variable) 해당 프로그램의 모든 파일, 함수에서도 접근 가능 ==> 외부 링크 필요할 때마다 초기화를 언제든 몇번이든 가능 다른 파일에서 접근하지 않는 전역 변수 선언시에는 그냥 main 함수 바깥에 선언해주면 됨 다른 파일에서 접근하려면 extern 키워드로 변수를 선언해야 함 // 전역 변수 사용 ex (외부 링크 시) int g_value; // 본문 내 선언..
[C++] 포인터, 주소연산자(&), 배열, 동적할당, 자료형 + vs 참조형 변수(&)
&도 /처럼 연산자! 타입(자료형) 에 따라서 연산 결과가 다르다 즉, 일반 배열과 동적할당한 배열의 자료형이 다르므로, 같은 배열이어도 &연산 결과는 다름! int myarr[10]; // type : int [] int *newarr = new int[10]; // type : int * arr vs &arr 가리키고 있는 것(개념) 은 다른데, 출력 값은 같다 if 동적할당 X 배열 => arr == &arr arr : 배열의 첫번째 요소(arr[0])를 가리키고 있는 포인터 &arr : 전체 배열 자체의 포인터 따라서 arr+1 과 &arr+1 의 값은 다르다! 배열과 배열 주소의 관계 https://hashcode.co.kr/questions/936/%EB%B0%B0%EC%97%B4-%EC%9D..