// 3x3 행렬 생성. element 자료형은 double형에 1 channel CvMat* matrix = cvCreateMat(3, 3, CV_64FC1); double element; // 1번째행 2번째열 데이터 접근하는 법. matrix->data.db[1*3+2] = element; element = matrix->data.db[1*3+2]; 또는 element = cvmGet(matrix, 1, 2); cvmSet(matrix, 1, 2, element); 그렇다면 matrix->data.db[1*3+1]에서 1*3+1에 대해서 알아보자. 일부러 3x3행렬의 중앙에 있는 element를 지정해 놓았다. 그 이유는 1*3+2의 의미를 확실히 외워라는 의미이다. | 1 2 3 | | 4 5 6 | 다음은 3x3 행렬로 각각의 element가 가지는 값을 표시해놓았다. | 7 8 9 | 1*3+1에서 먼저 1이 나타내는 것은 두번째 행(row)임을 나타내는 것이다. 열(column)이 절대 아님. 그렇다면 3이 나타내는 것은 당연히 이 행렬에서 한 행이 가지는 element의 수이다. 다시 말해서 열의 크기를 나타낸다. 마지막으로 1은 열을 나타낸다. 2번째 열에 있다는 이야기이다. 다음의 예를 보자. | 1 2 3 | | 4 5 6 | | 7 8 9 | 3번째 행 1번째 열을 나타내는 식은? 2*3+0 cvmGet이나 cvmSet을 이용하는 것보다 직접 접근하는 것이 편하지만 만약 행과 열을 헷갈린다면 결과는 OTL일 것이다. 신경써서 사용하자. 출처 : http://devnetga.com/blogtt/5?TSSESSIONdevnetgacom=5c8bf4d129f674b65a0766b03f728026 CV_32FC1과 CV_32FC2의 구조를 비교해보자. CvMat *mat1 = cvCreateMat(2, 3, CV_32F); CvMat *mat2 = cvCreateMat(1, 3, CV_32FC2);...
Machine Vision & Image Processing