cv::Mat 사용법
//Mat 테스트 -기본 연산
int MatTest()
{
// 생성
int cols = 3, rows=4;
int type = CV_64F;//CV_8UC=UCHAR 형, CV_64F=double 형
Mat mtColor = Mat( rows, cols, CV_8UC3, Scalar(0,0,0));//컬러 이미지, 순서주의! (세로, 가로)
Mat mtGray = Mat( rows, cols, CV_8UC1, Scalar(0));//그레이 이미지
Mat_<float> state(4, 1); //Mat_ 는 Mat의 Lite 버전
Mat state2(3, 4, CV_32F);//선언만
//생성과 동시에 각각 초기화
Mat stat3 = *(Mat_<float>(4, 4) << 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1);//구체적으로 초기화
//초기화
mtGray.setTo(Scalar(0));//전체값을 0으로 만듬
setIdentity(mtGray);//단위행렬로 초기화
setIdentity(mtGray, Scalar::all(3));//단위 행렬 값 지정
//재 생성, 구조 바뀜
mtGray = Mat::zeros(1,2, CV_8U);// 전부 0으로 초기화
mtGray = Mat::ones(2,1, CV_8U);// 전부 1로 초기화
mtGray = Mat::eye(3,3, CV_8U);// 단위 행렬로 초기화
//mtGray.zeros(1,2, CV_8U);MatPrint(&mtGray);// 리턴값이 'MatExpr'인 함수는 이런 방식은 효과 없음
//크기 변환, 내용 불변
Mat mtGray2;
resize(mtGray, mtGray, Size(2,3));
resize(mtGray, mtGray2, Size(4,7));MatPrint(&mtGray2);
//Mat mtGray3 = mtGray.reshape ( 0, 2 );MatPrint(&mtGray);MatPrint(&mtGray2);
//reshape(), create()등은 기존값을 살릴수 없으므로 새로 생성하는 게 좋다
//각각 지정 방법
//좌표로 지정
mtGray.at<byte>(0,0) = 0;//각각 지정
//전체 순서로 지정
mtGray.at<UCHAR>(0) = 1; mtGray.at<UCHAR>(1) = 2;
mtGray.at<UCHAR>(2) = 3; mtGray.at<UCHAR>(3) = 4;
//mtGray.reshape(1,3);MatPrint(&mtGray);
//역행렬 구하기, 부동소수점에서만 된다
double m[3][3] = {{1,2,1}, {0,1,1}, {1,0,0}};
Mat mtInv = Mat(3, 3, CV_64F, m).inv();
return 1;
}
//=========
//Mat 출력CString MatPrint(Mat *_pmt, int nType, bool bDisplay)
{
CString str, temp;
str.Format(_T("(%d,%d)\n"), _pmt->cols, _pmt->rows);
for(int r=0; r<_pmt->rows ; r++){
for(int c=0; c<_pmt->cols ; c++){
if( c==5){
temp.Format(_T(" ...")); str += temp; break;
}
switch( nType){
case CV_8U: temp.Format(_T("%d , "), _pmt->at<UCHAR>(r,c) ); str += temp; break;
case CV_32F: temp.Format(_T("%.2f , "), _pmt->at<float>(r,c) ); str += temp; break;
case CV_64F: temp.Format(_T("%.2f , "), _pmt->at<double>(r,c) ); str += temp; break;
}
//_pmt->at( ->cols
}
str += _T("\n");
}
if( bDisplay ) _DbgStr(str);
return str;
}
'Code > Desktop' 카테고리의 다른 글
[prj] HTML 태그, 속성 정리 삭제 유틸 프로그램 (0) | 2014.01.15 |
---|---|
콘솔 프로그램에서 끝내기전에 멈추는 방법 (0) | 2014.01.14 |
CPP HTML Parser (0) | 2014.01.14 |
OpenCV 기본 사용법 (0) | 2014.01.08 |
Win7에서 VC6 디버깅 문제 해결 (0) | 2014.01.08 |