日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

opencv矩阵运算(1)

發(fā)布時(shí)間:2025/4/16 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv矩阵运算(1) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
從本篇開(kāi)始整理下opencv實(shí)現(xiàn)的矩陣計(jì)算相關(guān)函數(shù)使用。

矩陣初始化

具體代碼

  這里初始化了兩個(gè)3X3矩陣,并將它的數(shù)據(jù)顯示出來(lái): <pre name="code" class="cpp">double x[3][3] = {{1, 50, -100}, {1, -110, 220}, {-1, 150, 150}}; double y[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};void showMatdate(Mat tmpMat){int i, j;CvScalar s1;Width = tmpMat.rows;Height = tmpMat.cols;IplImage tmp;tmp = tmpMat;for(i=0; i< Width; i++){for(j=0; j<Height; j++){s1 = cvGet2D(&tmp, i, j);printf("%0.1lf ", s1.val[0]);}printf("\n");}printf("\n\n"); }int main(int argc, char *argv[]){/*************初始化矩陣*****************************/mat1 = Mat(3, 3, CV_64FC1, x);src1 = mat1;mat2 = Mat(3, 3, CV_64FC1, y);src2 = mat2; /*************顯示矩陣數(shù)據(jù)***************************/printf("mat1:\n");showMatdate(mat1);printf("mat2:\n");showMatdate(mat2);return 0; }

結(jié)果顯示

矩陣絕對(duì)值之差

具體代碼

<pre name="code" class="cpp">/*************兩個(gè)矩陣絕對(duì)值之差*********************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvAbsDiff(&src1, &src2, &src3);printf("cvAbsDiff(mat1, mat2):\n");showMatdate(mat3);

結(jié)果顯示

矩陣與數(shù)值差的絕對(duì)值

具體代碼

<pre name="code" class="cpp">/*************矩陣與數(shù)值差的絕對(duì)值*******************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvAbsDiffS(&src1, &src3, Scalar(5));printf("cvAbsDiffS(mat1, 5):\n");showMatdate(mat3);

結(jié)果顯示

矩陣相加

具體代碼

<pre name="code" class="cpp">/************兩個(gè)矩陣相加***************************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvAdd(&src1, &src2, &src3);printf("cvAdd(mat1, mat2):\n");showMatdate(mat3);

結(jié)果顯示

矩陣權(quán)重相加

具體代碼

<pre name="code" class="cpp">/**********兩個(gè)矩陣以權(quán)重形式相加******************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvAddWeighted(&src1, 0.5, &src2, 0.5, 3, &src3);printf("cvAddWeighted(mat1, 0.5,mat2, 0.5, 3):\n");showMatdate(mat3);

  計(jì)算公式為:src3 = src1 * 0.5 + src2 * 0.5 + 3;

結(jié)果顯示

矩陣的與計(jì)算

具體代碼

<pre name="code" class="cpp">/*******************矩陣與計(jì)算********************** *******可以使用掩碼來(lái)決定計(jì)算被的數(shù)據(jù)元素********* *******對(duì)應(yīng)的還有cvNot cvOr cvXor *****************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvAnd(&src1, &src2, &src3);printf("cvAnd(mat1, mat2):\n");showMatdate(mat3);

結(jié)果顯示

矩陣比較

具體代碼

<pre name="code" class="cpp">/******************兩個(gè)矩陣比較********************/int tmp = CMP_EQ;mat3 = Mat(3, 3, CV_8UC1);src3 = mat3;mat1.convertTo(mat1, CV_8UC1);mat2.convertTo(mat2, CV_8UC1);cvCmp(&src1, &src2, &src3, tmp);printf("cvCmp(mat1, mat2):\n");showMatdate(mat3);

  需要先把mat1和mat2轉(zhuǎn)換為格式CV_8UC1,然后室友函數(shù)cvCmp進(jìn)行比較。注意cvCmp的flag標(biāo)志,本例使用的是相等:CMP_EQ,也就是將mat1和mat2 矩陣對(duì)應(yīng)位置的數(shù)值比較,如果相等,則mat3對(duì)應(yīng)位置數(shù)值設(shè)置為255,否則設(shè)置為0。對(duì)應(yīng)的flag有: <pre name="code" class="cpp">CMP_EQ src1 is equal to src2. CMP_GT src1 is greater than src2. CMP_GE src1 is greater than or equal to src2. CMP_LT src1 is less than src2. CMP_LE src1 is less than or equal to src2. CMP_NE src1 is unequal to src2.

結(jié)果顯示

計(jì)算矩陣絕對(duì)值

具體代碼

<pre name="code" class="cpp">/******************計(jì)算絕對(duì)值************************/mat3 = Mat(3, 3, CV_8UC1);src3 = mat3;cvConvertScaleAbs(&src1, &src3, 0.5, 4);printf("cvConvertScaleAbs(mat1, 0.5, 4):\n");showMatdate(mat3);注意:mat3 = | mat1 * 0.5 + 4 |;

結(jié)果顯示

計(jì)算矩陣非0元素個(gè)數(shù)

具體代碼

<pre name="code" class="cpp">/****************計(jì)算矩陣非0元素的個(gè)數(shù)***************/int sum = 0;showMatdate(mat2);sum = cvCountNonZero(&src2);printf("sum=%d\n", sum);

結(jié)果顯示

矩陣除法計(jì)算

具體代碼

<pre name="code" class="cpp">double x[3][3] = {{1, 50, -100}, {1, -110, 220}, {-1, 150, 150}}; double y[3][3] = {{1, 0, 0}, {0, 2, 0}, {0, 0, 3}};/*****************數(shù)組除法運(yùn)算************************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvDiv(&src1, &src2, &src3, 2);printf("cvDiv(mat1, mat2, 2)\n");showMatdate(mat3);注意:1、mat3 = mat1 * 2 / mat2。2、如果矩陣中mat2某一位為0,則mat3對(duì)應(yīng)那一位的結(jié)果直接為0。

結(jié)果顯示

矩陣行列式計(jì)算

具體代碼

<pre name="code" class="cpp">/*****************矩陣行列式計(jì)算**********************/double sum = 0;sum = cvDet(&src1);showMatdate(mat1);printf("cvDet(mat1)=%.1lf\n", sum);

結(jié)果顯示

矩陣元素指數(shù)計(jì)算

具體代碼

<pre name="code" class="cpp">/*****************矩陣元素指數(shù)計(jì)算**********************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvExp(&src1, &src3);printf("cvExp(mat1)\n");showMatdate(mat3);計(jì)算公式如下:

結(jié)果顯示[編輯?|?編輯源代碼]

矩陣水平/垂直翻轉(zhuǎn)

具體代碼

<pre name="code" class="cpp">/*****************矩陣水平或者垂直翻轉(zhuǎn)**********************/mat3 = Mat(3, 3, CV_64FC1);src3 = mat3;cvFlip(&src1, &src3, -1);printf("cvFlip(mat1, -1)\n");showMatdate(mat3);cvFlip(&src1, &src3, 0);printf("cvFlip(mat1, 0)\n");showMatdate(mat3);cvFlip(&src1, &src3, 1);printf("cvFlip(mat1, 1)\n");showMatdate(mat3);

   注意:在cvFlip中,當(dāng)flag小于0時(shí),水平垂直都翻轉(zhuǎn);flag為0時(shí),垂直翻轉(zhuǎn);flag大于0時(shí),水平翻轉(zhuǎn)。

總結(jié)

以上是生活随笔為你收集整理的opencv矩阵运算(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。