免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
OpenCV學(xué)習(xí)筆記(2):Mat矩陣的初始化和元素訪問

在研究Mat矩陣的初始化的時(shí)候,發(fā)現(xiàn)其不能像Matx輕量級(jí)矩陣那樣,直接利用數(shù)組來進(jìn)行初始化,而是利用一個(gè)內(nèi)部的變量類型:Scalar來進(jìn)行初始化的。參考手冊(cè)中的構(gòu)造函數(shù)如下所示:

(1) Mat::Mat()
(2) Mat::Mat(int rows, int cols, int type)

(3) Mat::Mat(Size size, int type)

(4) Mat::Mat(int rows, int cols, int type, constScalar& s)

(5) Mat::Mat(Size size, int type, constScalar& s)

(6) Mat::Mat(const Mat& m)

(7) Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)

(8) Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP)

(9) Mat::Mat(const Mat& m, const Range& rowRange, const Range& colRange)

(10) Mat::Mat(const Mat& m, const Rect& roi)

(11) Mat::Mat(const CvMat* m, bool copyData=false)

(12) Mat::Mat(const IplImage* img, bool copyData=false)

(13) template<typename T, int n> explicit Mat::Mat(const Vec<T, n>& vec, bool copyData=true)

(14) template<typename T, int m, int n> explicit Mat::Mat(const Matx<T, m, n>& vec, bool copyData=true)

(15) template<typename T> explicit Mat::Mat(const vector<T>& vec, bool copyData=false)

(16) Mat::Mat(const MatExpr& expr)

(17) Mat::Mat(int ndims, const int* sizes, int type)

(18) Mat::Mat(int ndims, const int* sizes, int type, constScalar& s)

(19) Mat::Mat(int ndims, const int* sizes, int type, void* data, const size_t* steps=0)

(20) Mat::Mat(const Mat& m, const Range* ranges)

似乎這樣的矩陣讓我們用起來感覺很不順手,不過接著往下讀參考手冊(cè),你會(huì)發(fā)現(xiàn)這樣一個(gè)例子:

Mat H(100, 100, CV_64F);
       for(int i = 0; i < H.rows; i++)
            for(int j = 0; j < H.cols; j++)
                  H.at<double>(i,j)=1./(i+j+1);

通過這個(gè)例子,我們嘗試來給Mat類型初始化。

第一種改進(jìn):(直接由以上例子仿制而來)

//用一個(gè)常數(shù)來初始化矩陣

void InitMat(Mat& m,float t)
{
 for(int i=0;i<m.rows;i++)
  for(int j=0;j<m.cols;j++)
   m.at<float>(i,j)=t;
}

主程序:

int _tmain(int argc, _TCHAR* argv[])
{
 //Mat矩陣中的初始化,可以利用Mat::at()來完成
 Mat M0(3,3,CV_32F);
 InitMat(M0,3);
}

第二種改進(jìn):

//用一個(gè)一維數(shù)組來初始化矩陣

void InitMat(Mat& m,float* num)
{
 for(int i=0;i<m.rows;i++)
  for(int j=0;j<m.cols;j++)
   m.at<float>(i,j)=*(num+i*m.rows+j);
}

主程序:

int _tmain(int argc, _TCHAR* argv[])
{
 //Mat矩陣中的初始化,可以利用Mat::at()來完成
float m0[]={ 1,2,3,
     6,5,4,
     7,8,9 };

 Mat M0(3,3,CV_32F);
 InitMat(M0,m0);
}

 

第三種改進(jìn):

//希望利用二維數(shù)組來初始化

void InitMat(Mat& m,float(*p)[3])
{
 for(int i=0;i<m.rows;i++)
 for(int j=0;j<m.cols;j++)
   m.at<float>(i,j)=*(*(p+i)+j);
}

主程序:

int _tmain(int argc, _TCHAR* argv[])
{
 //Mat矩陣中的初始化,可以利用Mat::at()來完成
float m[][3]={ 1,2,3,
     6,5,4,
     7,8,9 };

 Mat M0(3,3,CV_32F);
 InitMat(M0,m);
}

 

然而,注意在傳遞二維數(shù)組的時(shí)候,第三種方法的局限性在于必須要知道每一維度的元素個(gè)數(shù),其實(shí)可以將二維數(shù)組,例如a[2][3]的數(shù)組名稱a直接轉(zhuǎn)換成一個(gè)float指針傳遞進(jìn)去,當(dāng)成一位數(shù)組使用。即,

主程序:

int _tmain(int argc, _TCHAR* argv[])
{
 //Mat矩陣中的初始化,可以利用Mat::at()來完成
float m[][3]={ 1,2,3,
     6,5,4,
     7,8,9 };

 Mat M0(3,3,CV_32F);
 InitMat(M0,(float*)m);
}

 注:

數(shù)組和指針在參數(shù)傳遞時(shí)的對(duì)應(yīng)關(guān)系:
                                      實(shí)參                     形參
數(shù)組的數(shù)組:               char a[8][10]     char(*p)[10]
指針的數(shù)組:               char *a[10]        char **p
數(shù)組指針(行指針): char(*a)[8]         char(a)[8]
指針的指針:               char **a            char**a

 

結(jié)果運(yùn)行截圖如下:

附注:有關(guān)多維數(shù)組的參數(shù)傳遞問題,詳細(xì)參見《C專家編程,Page225》

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【從零學(xué)習(xí)OpenCV 4】Mat類構(gòu)造與賦值
(轉(zhuǎn)載)OpenCV中矩陣的定義
OpenCV參考手冊(cè)之Mat類詳解(一)
opencv Mat 像素操作
OpenCV-繪制旋轉(zhuǎn)矩形
視覺SLAM——OpenCV之Mat結(jié)構(gòu)詳解 數(shù)據(jù)成員和構(gòu)造函數(shù) 創(chuàng)建Mat方法 遍歷Mat方法
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服