《学习opencv》笔记——矩阵和图像操作——cvGertDims,cvGetDimSize,cvGetRow,cvGetRow,cvGetSize and cvGetSubRect

来源:互联网 发布:普通话考试准备软件 编辑:程序博客网 时间:2024/05/16 12:53


矩阵和图像的操作


(1)cvGetDims函数

其结构


int cvGetDims(//返回矩阵的维度和每维上的大小const CvArr* arr,//目标矩阵int * sizes = NULL//每个维上的大小,是个数组);

实例代码


#include <cv.h>#include <highgui.h>#include <stdio.h>#include <iostream>using namespace std;int main() { double a[5][5] = {    {1,0,0,0,6},{0,2,0,7,0},{0,0,3,0,0},{0,9,0,4,0},{8,0,0,0,5}};CvMat va=cvMat(5,5, CV_64FC1,a);cout<<"目标矩阵:"<<endl;for(int i=0;i<5;i++){for(int j=0;j<5;j++)printf("%f\t",cvmGet(&va,i,j));cout << endl;}int sizes[100] = {0};int v = cvGetDims(&va,sizes);cout << "矩阵的维数:";    cout << v << endl;cout << "每个维度上的大小:"<<endl;for(int i = 0 ; i<100&&sizes[i]!=0;i++)cout << sizes[i] << endl;getchar();return 0;}

输出结果




(2)cvGetDimSize函数

其结构


int cvGetDimSize(//返回有index指定的维度的大小const CvArr* arr,//目标矩阵int index//维度索引);

实例代码


#include <cv.h>#include <highgui.h>#include <stdio.h>#include <iostream>using namespace std;int main() { double a[5][4] = {    {1,0,0,0},{0,2,0,7},{0,0,3,0},{0,9,0,4},{8,0,0,0}};CvMat va=cvMat(5,4, CV_64FC1,a);cout<<"目标矩阵:"<<endl;for(int i=0;i<5;i++){for(int j=0;j<4;j++)printf("%f\t",cvmGet(&va,i,j));cout << endl;}int v = cvGetDimSize(&va,1);cout << "矩阵的指定维数上的大小为:";    cout << v << endl;getchar();return 0;}

输出结果




(3)cvGetRow函数

其结构


CvMat* cvGetRow(//取出矩阵中的一行const CvArr* arr,//目标矩阵CvMat* submat,//矩阵指针int row//所要取的行的索引数);

实例代码


#include <cv.h>#include <highgui.h>#include <stdio.h>#include <iostream>using namespace std;int main() { double a[5][5] = {    {1,0,0,0,0},{0,2,0,0,0},{0,0,3,0,0},{0,0,0,4,0},{0,0,0,0,5}};CvMat va=cvMat(5,5, CV_64FC1,a);cout<<"目标矩阵:"<<endl;for(int i=0;i<5;i++){for(int j=0;j<5;j++)printf("%f\t",cvmGet(&va,i,j));cout << endl;}CvMat vb =cvMat(5,5, CV_64FC1);CvMat vc =cvMat(5,5, CV_64FC1); vc = *(cvGetRow(&va,&vb,3));cout << "所要取的行为:"<< endl;for(int i=0;i<vc.rows;i++){for(int j=0;j<vc.cols;j++)printf("%f\t",cvmGet(&vc,i,j));cout << endl;}getchar();return 0;}

输出结果




(4)cvGetRows函数

其结构


CvMat* cvGetRows(//取出矩阵中的一些行const CvArr* arr,//目标矩阵CvMat* submat,//矩阵指针int start_row,//开始行,包含int end_row//结束行,不包含);

实例代码


#include <cv.h>#include <highgui.h>#include <stdio.h>#include <iostream>using namespace std;int main() { double a[5][5] = {    {1,0,0,0,0},{0,2,0,0,0},{0,0,3,0,0},{0,0,0,4,0},{0,0,0,0,5}};CvMat va=cvMat(5,5, CV_64FC1,a);cout<<"目标矩阵:"<<endl;for(int i=0;i<5;i++){for(int j=0;j<5;j++)printf("%f\t",cvmGet(&va,i,j));cout << endl;}CvMat vb =cvMat(5,5, CV_64FC1);CvMat vc =cvMat(5,5, CV_64FC1); vc = *(cvGetRows(&va,&vb,0,3));cout << "所要取的行为:"<< endl;for(int i=0;i<vc.rows;i++){for(int j=0;j<vc.cols;j++)printf("%f\t",cvmGet(&vc,i,j));cout << endl;}getchar();return 0;}

输出结果




(5)cvGetSize函数

其结构


CvSize cvGetSize(//获得图像尺寸const CvArr* arr);


实例代码


#include <cv.h>#include <highgui.h>#include <stdio.h>#include <iostream>using namespace std;int main() { IplImage *src1;src1=cvLoadImage("5.jpg");CvSize cs = cvGetSize(src1);cout << "图像的尺寸为:(单位:像素)"<<endl;cout <<"高:"<< cs.height << endl;cout <<"宽:"<<cs.width << endl;getchar();return 0;}

输出结果




(6)cvGetSubRect函数

其结构


CvSize cvGetSubRect(//返回选择区域的尺寸const CvArr* arr,//目标矩阵CvArr* submat,//矩阵指针CvRect rect//选择区域);


ps:1.《学习openCV》中该函数返回值为CvSize,不过我所用的2.49中返回值是CvMat,请注意。

        2. 切勿在使用submat前初始化变量,不然会造成内存溢出。


实例代码


#include <cv.h>#include <highgui.h>#include <stdio.h>#include <iostream>using namespace std;int main() { IplImage *res;int subX = 0;int subY = 0;CvMat matSrc;res = cvLoadImage("1.jpg", CV_LOAD_IMAGE_COLOR);subX = res->width / 2;subY = res->height / 2;CvMat *pMat = cvGetSubRect(res, &matSrc, cvRect(0, 0, res->width - subX, res->height - subY));IplImage *pSubImg = cvCreateImageHeader(cvSize(440, 660), 8, 1);cvGetImage(pMat, pSubImg); cvShowImage("所截图像",pSubImg);cvShowImage("原图像", res);cvWaitKey(0);return 0;}

输出结果




to be continued


45 0