【OpenCV學習】子矩陣操作


作者:gnuhpc
出處:http://www.cnblogs.com/gnuhpc/

#include "highgui.h"
#include "cv.h"
#include <iostream>
#include <iomanip>


using namespace std;

void main()
{
int i=0;
int j=0;
CvRect mat_rect=cvRect(1,1,3,3);//指定取得數組子集的范圍
CvMat *mat=cvCreateMat(6,6,CV_64FC1);//原數組
CvMat *submat=cvCreateMat(3,3,CV_64FC1);//按mat_rect指定取得的數組子集
CvMat *mat_rows=cvCreateMat(2,6,CV_64FC1);//按一定跨度內的行取得的數組子集
/*對這個6*6的矩陣初始化*/
for (i=0;i<6;i++)
{
for (j=0;j<6;j++)
{
CV_MAT_ELEM(*mat,double,i,j)=i*6+j;
}
}
/*打印源矩陣*/
for (i=0;i<6;i++)
{
for (j=0;j<6;j++)
{
cout<<setw(3)<<CV_MAT_ELEM(*mat,double,i,j);
}
cout<<endl;
}
cout<<endl;
/*取子數組,大小根據mat_rect來決定,然后打印*/
cvGetSubRect(mat,submat,mat_rect);
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
cout<<setw(3)<<CV_MAT_ELEM(*submat,double,i,j);
}
cout<<endl;
}
cout<<endl;
/*取第一行(從0開始)取到第(3-1=)2行,並打印*/
cvGetRows(mat,mat_rows,1,3,1);
for (i=0;i<2;i++)
{
for (j=0;j<6;j++)
{
cout<<setw(3)<<CV_MAT_ELEM(*mat_rows,double,i,j);
}
cout<<endl;
}
cvReleaseMat(&mat);
cvReleaseMat(&submat);
cvReleaseMat(&mat_rows);
}

在OpenCV中一般取元素都用定義好的宏:
取Mat結構的元素的宏為CV_MAT_ELEM,它取2D的矩陣最方便。
取IplImage元素的宏為CV_IMAGE_ELEM,如取一個圖像(x,y)點的灰度值:
uchar *ptr=CV_IAMGE_ELEM(image,uchar,i,j*3);
ptr[0],ptr[1],ptr[2]就是對應的B/G/R三個分量了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM