《學習opencv》筆記——矩陣和影像處理——cvMinManLoc,cvMul,cvNot,cvNorm and cvNormalize

來源:互聯網
上載者:User

標籤:


矩陣和映像的操作


(1)cvMinManLoc函數

其結構


void cvMinMaxLoc(//取出矩陣中最大最小值const CvArr* arr,//目標矩陣double* min_val,//最小值double* max_val,//最大值CvPoint* min_loc = NULL,//最小值位置CvPoint* max_loc = NULL,//最大值位置const CvArr* mask = NULL//矩陣“開關”);

執行個體代碼


#include <cv.h>#include <highgui.h>#include <stdio.h>#include <iostream>using namespace std;int main() { double a[3][3] = {    {1,2,3},{4,5,6},{7,8,9}};CvMat va = cvMat(3,3, CV_64FC1,a);cout<<"目標矩陣:"<<endl;for(int i=0;i<3;i++){for(int j=0;j<3;j++)printf("%f\t",cvmGet(&va,i,j));cout << endl;}double min_Val,max_Val;cvMinMaxLoc(&va,&min_Val,&max_Val);cout << "最小值為:" << endl;cout << min_Val << endl;cout << "最大值為:" << endl;cout << max_Val << endl;getchar();return 0;}

輸出代碼




(2)cvMul函數

其結構


void cvMul(//兩個矩陣相應元素相乘const CvArr* src1,//矩陣1const CvArr* src2,//矩陣2CvArr* dst,//結果矩陣double scale = 1//因子係數);


執行個體代碼


#include <cv.h>#include <highgui.h>#include <stdio.h>#include <iostream>using namespace std;int main() { double a[3][3] = {    {1,2,3},{4,5,6},{7,8,9}};CvMat va = cvMat(3,3, CV_64FC1,a);double b[3][3] = {    {2,1,2},{1,2,1},{2,1,2}};CvMat vb = cvMat(3,3, CV_64FC1,b);cout<<"目標矩陣:"<<endl;for(int i=0;i<3;i++){for(int j=0;j<3;j++)printf("%f\t",cvmGet(&va,i,j));cout << endl;}cout<<"因子矩陣:"<<endl;for(int i=0;i<3;i++){for(int j=0;j<3;j++)printf("%f\t",cvmGet(&vb,i,j));cout << endl;}cvMul(&va,&vb,&va);cout<<"結果矩陣:"<<endl;for(int i=0;i<3;i++){for(int j=0;j<3;j++)printf("%f\t",cvmGet(&va,i,j));cout << endl;}getchar();return 0;}

輸出結果




(3)cvNot函數

其結構


void cvNot(//元素按位取反const CvArr* src,//目標矩陣CvArr* dst//結果矩陣);

執行個體代碼


#include <cv.h>#include <highgui.h>#include <stdio.h>#include <iostream>using namespace std;int main() {IplImage *src1,*src2;src1=cvLoadImage("5.jpg");src2=cvLoadImage("7.jpg");cvNot(src1,src2);cvShowImage( "原圖", src1);cvShowImage( "結果圖", src2);cvWaitKey();return 0;}

輸出結果




(4)cvNorm函數

其結構


double cvNorm(//計算各種範式const CvArr* arr1,//矩陣1const CvArr* arr2 = NULL,//矩陣2int norm_type = CV_L2,//選擇範式標量const CvArr* mask = NULL//矩陣“開關”);


ps:arr2=NULL時,對於不同的norm_type由cvNorm()計算範式的公式




 arr2非空。且norm_type不同值時函數cvNorm()計算範數的計算公式


  


執行個體代碼


#include <cv.h>#include <highgui.h>#include <stdio.h>#include <iostream>using namespace std;int main() { double a[3][3] = {    {1,2,3},{4,-12,6},{7,8,9}};CvMat va = cvMat(3,3, CV_64FC1,a);cout<<"目標矩陣:"<<endl;for(int i=0;i<3;i++){for(int j=0;j<3;j++)printf("%f\t",cvmGet(&va,i,j));cout << endl;}double dis = cvNorm(&va,NULL,CV_C,NULL);cout<<"結果:"<<endl;cout<< dis <<endl;getchar();return 0;}

輸出結果




(5)cvNormalize函數

其結構


void cvNormalize(const CvArr* src, //目標矩陣CvArr* dst,//結果矩陣double a = 1.0 // 歸一化區間上限double b = 0.0 // 歸一化區間下限int norm_type = CV_L2,//選擇歸一化標量const CvArr* mask //矩陣“開關”);


ps:函數cvNormalize()的參數norm_type可能的值



執行個體代碼


#include <cv.h>#include <highgui.h>#include <stdio.h>#include <iostream>using namespace std;int main() { double a[3][3] = {    {1,0,0},{0,2,0},{0,0,2}};CvMat va = cvMat(3,3, CV_64FC1,a);cout<<"目標矩陣:"<<endl;for(int i=0;i<3;i++){for(int j=0;j<3;j++)printf("%f\t",cvmGet(&va,i,j));cout << endl;}cvNormalize(&va,&va,1,0,CV_C);cout<<"結果矩陣:"<<endl;for(int i=0;i<3;i++){for(int j=0;j<3;j++)printf("%f\t",cvmGet(&va,i,j));cout << endl;}getchar();return 0;}

輸出結果




to be continued

著作權聲明:本文部落格原創文章,部落格,未經同意,不得轉載。

《學習opencv》筆記——矩陣和影像處理——cvMinManLoc,cvMul,cvNot,cvNorm and cvNormalize

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.