// 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);
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 | 다음은 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
| 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);
CvFileStorage *ad = cvOpenFileStorage("ad.txt", 0, CV_STORAGE_WRITE);
CvMat *mat2 = cvCreateMat(1, 3, CV_32FC2);
CvFileStorage *ad = cvOpenFileStorage("ad.txt", 0, CV_STORAGE_WRITE);
cvmSetZero(mat1);
cvmSetZero(mat2);
mat1->data.fl[1] = 5;
mat1->data.fl[2] = 8;
cvmSetZero(mat2);
mat1->data.fl[1] = 5;
mat1->data.fl[2] = 8;
mat2->data.fl[1] = 5;
mat2->data.fl[2] = 8;
mat2->data.fl[2] = 8;
cvWrite(ad, "mat1", mat1);
cvWrite(ad, "mat2", mat2);
cvReleaseFileStorage(&ad);
return;
cvWrite(ad, "mat2", mat2);
cvReleaseFileStorage(&ad);
return;
mat1의 메모리에 저장되는 순서
|0 5 8 0 0 0|
논리적인 형태
|0 5 8|
|0 0 0|
mat2의 메모리에 저장되는 순서
|0 5 8 0 0 0|
|0 5 8 0 0 0|
논리적인 형태
|0 5 8|
|0 0 0|
mat2의 메모리에 저장되는 순서
|0 5 8 0 0 0|
댓글
댓글 쓰기