[杞浇]opencv鐭╅樀鍏冪畻
|
opencv鐭╅樀鍏冪畻
- 缁艰堪:
- OpenCV鏈夐拡瀵圭煩闃垫搷浣滅殑C璇█鍑芥暟. 璁稿鍏朵粬鏂规硶鎻愪緵浜嗘洿鍔犳柟渚跨殑C++鎺ュ彛锛屽叾鏁堢巼涓嶰penCV涓€鏍?
- OpenCV灏嗗悜閲忎綔涓?缁寸煩闃靛鐞?
- 鐭╅樀鎸夎瀛樺偍锛屾瘡琛屾湁4瀛楄妭鐨勬牎鏁?
- 鍒嗛厤鐭╅樀绌洪棿:
CvMat* cvCreateMat(int rows, int cols, int type);
type: 鐭╅樀鍏冪礌绫诲瀷. 鏍煎紡涓篊V_<bit_depth>(S|U|F)C<number_of_channels>.
渚嬪: CV_8UC1 琛ㄧず8浣嶆棤绗﹀彿鍗曢€氶亾鐭╅樀, CV_32SC2琛ㄧず32浣嶆湁绗﹀彿鍙岄€氶亾鐭╅樀. 渚嬬▼:
CvMat* M = cvCreateMat(4,4,CV_32FC1);
- 閲婃斁鐭╅樀绌洪棿:
CvMat* M = cvCreateMat(4,4,CV_32FC1);
cvReleaseMat(&M);
- 澶嶅埗鐭╅樀:
CvMat* M1 = cvCreateMat(4,4,CV_32FC1); CvMat* M2; M2=cvCloneMat(M1);
- 鍒濆鍖栫煩闃?
double a[] = { 1, 2, 3, 4, 5, 6, 7, 8,
9, 10, 11, 12 };
CvMat Ma=cvMat(3, 4, CV_64FC1, a); 鍙︿竴绉嶆柟娉?
CvMat Ma;
cvInitMatHeader(&Ma, 3, 4, CV_64FC1, a);
- 鍒濆鍖栫煩闃典负鍗曚綅闃?
CvMat* M = cvCreateMat(4,4,CV_32FC1);
cvSetIdentity(M); // 杩欓噷浼间箮鏈夐棶棰橈紝涓嶆垚鍔?/pre>
- 鍋囪闇€瑕佸瓨鍙栦竴涓?缁存诞鐐圭煩闃电殑绗?i,j)涓厓绱?
- 闂存帴瀛樺彇鐭╅樀鍏冪礌:
-
cvmSet(M,i,j,2.0); // Set M(i,j)
t = cvmGet(M,i,j); // Get M(i,j)
- 鐩存帴瀛樺彇锛屽亣璁句娇鐢?-瀛楄妭鏍℃:
CvMat* M = cvCreateMat(4,4,CV_32FC1);
int n = M->cols;
float *data = M->data.fl;
data[i*n+j] = 3.0;
- 鐩存帴瀛樺彇锛屾牎姝e瓧鑺備换鎰?
CvMat* M = cvCreateMat(4,4,CV_32FC1); int step = M->step/sizeof(float); float *data = M->data.fl;
(data+i*step)[j] = 3.0;
- 鐩存帴瀛樺彇涓€涓垵濮嬪寲鐨勭煩闃靛厓绱?
double a[16];
CvMat Ma = cvMat(3, 4, CV_64FC1, a);
a[i*4+j] = 2.0; // Ma(i,j)=2.0;
- 鐭╅樀-鐭╅樀鎿嶄綔:
CvMat *Ma, *Mb, *Mc;
cvAdd(Ma, Mb, Mc); // Ma+Mb -> Mc
cvSub(Ma, Mb, Mc); // Ma-Mb -> Mc
cvMatMul(Ma, Mb, Mc); // Ma*Mb -> Mc
- 鎸夊厓绱犵殑鐭╅樀鎿嶄綔:
CvMat *Ma, *Mb, *Mc;
cvMul(Ma, Mb, Mc); // Ma.*Mb -> Mc
cvDiv(Ma, Mb, Mc); // Ma./Mb -> Mc
cvAddS(Ma, cvScalar(-10.0), Mc); // Ma.-10 -> Mc
- 鍚戦噺涔樼Н:
double va[] = {1, 2, 3};
double vb[] = {0, 0, 1};
double vc[3];
CvMat Va=cvMat(3, 1, CV_64FC1, va);
CvMat Vb=cvMat(3, 1, CV_64FC1, vb);
CvMat Vc=cvMat(3, 1, CV_64FC1, vc);
double res=cvDotProduct(&Va,&Vb); // 鐐逛箻: Va . Vb -> res
cvCrossProduct(&Va, &Vb, &Vc); // 鍚戦噺绉? Va x Vb -> Vc
end{verbatim}
娉ㄦ剰 Va, Vb, Vc 鍦ㄥ悜閲忕Н涓悜閲忓厓绱犱釜鏁伴』鐩稿悓.
- 鍗曠煩闃垫搷浣?
CvMat *Ma, *Mb;
cvTranspose(Ma, Mb); // transpose(Ma) -> Mb (涓嶈兘瀵硅嚜韬繘琛岃浆缃?
CvScalar t = cvTrace(Ma); // trace(Ma) -> t.val[0]
double d = cvDet(Ma); // det(Ma) -> d
cvInvert(Ma, Mb); // inv(Ma) -> Mb
- 闈為綈娆$嚎鎬х郴缁熸眰瑙?
CvMat* A = cvCreateMat(3,3,CV_32FC1);
CvMat* x = cvCreateMat(3,1,CV_32FC1);
CvMat* b = cvCreateMat(3,1,CV_32FC1);
cvSolve(&A, &b, &x); // solve (Ax=b) for x
- 鐗瑰緛鍊煎垎鏋?閽堝瀵圭О鐭╅樀):
CvMat* A = cvCreateMat(3,3,CV_32FC1);
CvMat* E = cvCreateMat(3,3,CV_32FC1);
CvMat* l = cvCreateMat(3,1,CV_32FC1);
cvEigenVV(&A, &E, &l); // l = A鐨勭壒寰佸€?(闄嶅簭鎺掑垪) // E = 瀵瑰簲鐨勭壒寰佸悜閲?(姣忚)
- 濂囧紓鍊煎垎瑙VD:
CvMat* A = cvCreateMat(3,3,CV_32FC1);
CvMat* U = cvCreateMat(3,3,CV_32FC1);
CvMat* D = cvCreateMat(3,3,CV_32FC1);
CvMat* V = cvCreateMat(3,3,CV_32FC1);
cvSVD(A, D, U, V, CV_SVD_U_T|CV_SVD_V_T); // A = U D V^T
鏍囧彿浣垮緱 U 鍜?V 杩斿洖鏃惰杞疆(鑻ユ病鏈夎浆缃爣鍙凤紝鍒欐湁闂涓嶆垚鍔?!!).
鑷?a href="http://hi.baidu.com/wmsunny/blog/item/f68877fb7854908f9f514654.html">http://hi.baidu.com/wmsunny/blog/item/f68877fb7854908f9f514654.html
|
鏈枃寮曠敤鍦板潃锛?
|
|
|
|