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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv计算两数组的乘积_opencv矩阵运算(2)

發(fā)布時間:2024/9/30 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv计算两数组的乘积_opencv矩阵运算(2) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡單介紹

本篇承接上一篇。繼續(xù)opencv下矩陣計算的函數(shù)使用。

計算矩陣的逆

注意:矩陣A是可逆矩陣的充分必要條件是行列式detA不等于0。

詳細代碼

double x[3][3] = {{1, 2, 3}, {2, 2, 1}, {3, 4, 3}};

double y[3][3] = {{1, 0, 0}, {0, 2, 0}, {0, 0, 3}};

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

s1 = cvGet2D(&tmp, i, j);

printf("%0.1lf ", s1.val[0]);

}

printf("\n");

}

printf("\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);

/*****************矩陣的逆**********************/

mat3 = Mat(3, 3, CV_64FC1);

src3 = mat3;

cvInvert(&src1, &src3);

showMatdate(mat3);

return 0;

}

結(jié)果顯示

矩陣元素自然對數(shù)

詳細代碼

/*****************矩陣元素自然對數(shù)**********************/

mat3 = Mat(3, 3, CV_64FC1);

src3 = mat3;

cvLog(&src1, &src3);

showMatdate(mat3);

結(jié)果顯示

矩陣查找表轉(zhuǎn)換

詳細代碼

/*****************矩陣查找表轉(zhuǎn)換**×******************/

uchar lut[256];

mat3 = Mat(3, 3, CV_8UC1);

src3 = mat3;

mat1.convertTo(mat1, CV_8UC1);

src1 = mat1;

mat2 = cvCreateMatHeader(1, 256, CV_8UC1);

src2 = mat2;

for (int i = 0; i < 256; i++) {

lut[i] = 255 - i;

}

cvSetData(&src2, lut, 0);

cvLUT(&src1, &src3, &src2);

printf("cvLUT(mat1):\n");

showMatdate(mat3);

注意:mat3 = src2[mat1].(假設(shè)mat1格式為CV_8U)

mat3 = src2[mat1 + 128].(假設(shè)mat1格式為CV_8S)

結(jié)果顯示

計算向量間馬氏距離

詳細代碼

/*************顯示矩陣數(shù)據(jù)***************************/

printf("mat1:\n");

showMatdate(mat1);

printf("mat2:\n");

showMatdate(mat2);

/*****************計算向量間馬氏距離**********************/

mat3 = Mat(3, 3, CV_64FC1, z);

src3 = mat3;

printf("mat3:\n");

showMatdate(mat3);

tmp = cvMahalanobis(&src1, &src2, &src3);

printf("cvMahalanobis(mat1, mat2, mat3):?%.1lf\n", tmp);

結(jié)果顯示

獲得矩陣元素間最大值

詳細代碼

/*****************計算矩陣參數(shù)間最大值**********************/

mat3 = Mat(3, 3, CV_64FC1);

src3 = mat3;

cvMax(&src1, &src2, &src3);

printf("cvMax(mat1, mat2):\n");

showMatdate(mat3);

類似的還有cvMaxS:計算矩陣元素和參數(shù)的最大值。

cvAvg:計算矩陣元素的平均值。

cvAvgSdv:計算矩陣元素的平均值和標準差。

cvMin:計算矩陣參數(shù)間最小值。

cvMinS:計算矩陣元素和參數(shù)的最小值。

結(jié)果顯示

單通道合成多通道矩陣

詳細代碼

mat3 = Mat(1, 3, CV_8UC3);

src3 = mat3;

cvMerge(&src1, &src2, 0, 0, &src3);

printf("cvMax(mat1, mat2):\n");

showMatdate(mat3);

相應(yīng)的函數(shù)為:split()(將多通道分離為單通道矩陣)。

獲取矩陣最大最小元素

詳細代碼

printf("mat1:\n");

showMatdate(mat1);

cvMinMaxLoc(&src1, &min, &max, &min_p1, &max_p2);

printf("min:%lf, min_p1.x:%d, min_p1.y:%d\n", min, min_p1.x, min_p1.y);

printf("max:%lf, max_p2.x:%d, max_p2.y:%d\n", max, max_p2.x, max_p2.y);

獲取到最大最小值:max,min。以及它們的相應(yīng)位置坐標:min_p1, max_p2。

結(jié)果顯示

兩個矩陣傅里葉頻譜相乘

詳細代碼

printf("mat1:\n");

showMatdate(mat1);

printf("mat2:\n");

showMatdate(mat2);

mat3 = Mat(3, 3, CV_64FC1);

src3 = mat3;

cvMulSpectrums(&src1, &src2, &src3, DFT_ROWS);

printf("mat3:\n");

showMatdate(mat3);

結(jié)果顯示

矩陣乘法

詳細代碼

printf("mat1:\n");

showMatdate(mat1);

printf("mat2:\n");

showMatdate(mat2);

mat3 = Mat(3, 3, CV_64FC1);

src3 = mat3;

cvMul(&src1, &src2, &src3, 3);

printf("cvMul(mat1 * mat2 * 3):\n");

showMatdate(mat3);

結(jié)果顯示

矩陣和轉(zhuǎn)置的乘積

詳細代碼

printf("mat1:\n");

showMatdate(mat1);

printf("mat2:\n");

showMatdate(mat2);

mat3 = Mat(3, 3, CV_64FC1);

src3 = mat3;

cvMulTransposed(&src1, &src3, 0, &src2);

printf("cvMulTransposed(mat1):\n");

showMatdate(mat3);

void cvMulTransposed( const CvArr* src, CvArr* dst, int order, const CvArr* delta=NULL );

src:輸入矩陣

dst:目標矩陣

order:乘法順序

delta:一個可選數(shù)組, 在乘法之前從 src 中減去該數(shù)組。

函數(shù) cvMulTransposed 計算 src 和它的轉(zhuǎn)置的乘積。

函數(shù)求值公式:

假設(shè) order=0

dst=(src-delta)*(src-delta)T

否則

dst=(src-delta)T*(src-delta)

結(jié)果顯示

矩陣絕對差等

詳細代碼

printf("mat1:\n");

showMatdate(mat1);

printf("mat2:\n");

showMatdate(mat2);

mat3 = Mat(3, 3, CV_64FC1);

src3 = mat3;

tmp = cvNorm(&src1, &src2, NORM_L1);

printf("cvNorm(mat1, mat2, NORM_INF):%lf\n", tmp);

double cvNorm(const CvArr* arr1, const CvArr* arr2=NULL, int norm_type=CV_L2, const CvArr* mask=NULL )

假設(shè)arr2 == NULL

則:

否則:

或者

結(jié)果顯示

極性坐標轉(zhuǎn)換到笛卡爾坐標

詳細代碼

printf("mat1:\n");

showMatdate(mat1);

printf("mat2:\n");

showMatdate(mat2);

mat3 = Mat(3, 1, CV_64FC1);

src3 = mat3;

mat4 = Mat(3, 1, CV_64FC1);

src4 = mat4;

cvPolarToCart(&src1, &src2, &src3, &src4, true);

printf("cvPolarToCart(mat1, mat2)--x:\n");

showMatdate(mat3);

printf("cvPolarToCart(mat1, mat2)--y:\n");

showMatdate(mat4);

void cvPolarToCart(const CvArr* magnitude, const CvArr* angle, CvArr* x, CvArr* y, int angle_in_degrees=0)

magnitude:極坐標的長度。

angle:極坐標的角度。

x:笛卡爾X坐標。

y:笛卡爾Y坐標。

angle_in_degrees:若為true,表示輸入的是角度,否則表示輸入的是弧度。

結(jié)果顯示

矩陣元素求冪

詳細代碼

printf("mat1:\n");

showMatdate(mat1);

mat3 = Mat(3, 1, CV_64FC1);

src3 = mat3;

cvPow(&src1, &src3, 2);

printf("cvPow(mat1, 2):\n");

showMatdate(mat3);

結(jié)果顯示

矩陣簡化為向量

詳細代

printf("mat1:\n");

showMatdate(mat1);

mat3 = Mat(3, 1, CV_64FC1);

src3 = mat3;

cvReduce(&src1, &src3, 1, CV_REDUCE_MAX);

printf("cvReduce(mat1, 1 , CV_REDUCE_MAX):\n");

showMatdate(mat3);

void cvReduce(const CvArr* src, CvArr* dst, int dim=-1, int op=CV_REDUCE_SUM)

src:待簡化的矩陣。

dst:生成的向量。

dim:0意味著矩陣被處理成一行,1意味著矩陣被處理成為一列,-1時維數(shù)將依據(jù)輸出向量的大小自己主動選擇.

op:

CV_REDUCE_SUM-輸出是矩陣的全部行/列的和.

CV_REDUCE_AVG-輸出是矩陣的全部行/列的平均向量.

CV_REDUCE_MAX-輸出是矩陣的全部行/列的最大值.

CV_REDUCE_MIN-輸出是矩陣的全部行/列的最小值.

結(jié)果顯示

總結(jié)

以上是生活随笔為你收集整理的opencv计算两数组的乘积_opencv矩阵运算(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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