1:代码如下:
#include "stdafx.h" #include "cxcore.h" #include "cvcam.h" #include "windows.h" #include "cv.h" #include "highgui.h" #include "iostream" using namespace std; CvMat* RankPoint(CvMat* p); /*输出矩阵*/ void PrintMat2(CvMat*target, char * name)//第一个参数为cvMat矩阵指针,第二个参数为输出的矩阵的名字 { printf("%s: ", name); for (int i=0; i<target->rows; i++) { for (int j=0; j<target->cols;j++) { printf("%f ", cvmGet(target, i,j)); } printf(" "); } } CvMat* RankPoint(CvMat* p) { CvMat* p_dst=cvCreateMat(3,4,CV_32FC1);//图像上点的矩阵,竖着依次为u,v,1 double a[2][4]; a[0][0]=cvmGet(p,0,0); a[0][1]=cvmGet(p,0,1); a[0][2]=cvmGet(p,0,2); a[0][3]=cvmGet(p,0,3); a[1][0]=cvmGet(p,1,0); a[1][1]=cvmGet(p,1,1); a[1][2]=cvmGet(p,1,2); a[1][3]=cvmGet(p,1,3); //cout<<a[0][2]<<endl; double b; for(int j=3;j>1;j--) { for(int i=0;i<j;i++) { if(a[0][i]>=a[0][i+1]) { b=a[0][i]; a[0][i]=a[0][i+1]; a[0][i+1]=b; b=a[1][i]; a[1][i]=a[1][i+1]; a[1][i+1]=b; } } } for(int i=0;i<4;i=i+2) { if(a[1][i]>=a[1][i+1]) { b=a[0][i]; a[0][i]=a[0][i+1]; a[0][i+1]=b; b=a[1][i]; a[1][i]=a[1][i+1]; a[1][i+1]=b; } } cvmSet(p_dst,0,0,a[0][1]); cvmSet(p_dst,0,1,a[0][3]); cvmSet(p_dst,0,2,a[0][2]); cvmSet(p_dst,0,3,a[0][0]); cvmSet(p_dst,1,0,a[1][1]); cvmSet(p_dst,1,1,a[1][3]); cvmSet(p_dst,1,2,a[1][2]); cvmSet(p_dst,1,3,a[1][0]); cvmSet(p_dst,2,0,1); cvmSet(p_dst,2,1,1); cvmSet(p_dst,2,2,1); cvmSet(p_dst,2,3,1); return p_dst; /*------释放内存------*/ cvReleaseMat(&p_dst); /*------------*/ } int main() { CvMat* p_callback_circle=cvCreateMat(3,4,CV_32FC1);//图像上点的矩阵,竖着依次为u,v,1 cvmSet(p_callback_circle,0,0,11); cvmSet(p_callback_circle,0,1,50); cvmSet(p_callback_circle,0,2,60); cvmSet(p_callback_circle,0,3,10); cvmSet(p_callback_circle,1,0,61); cvmSet(p_callback_circle,1,1,23); cvmSet(p_callback_circle,1,2,55); cvmSet(p_callback_circle,1,3,20); cvmSet(p_callback_circle,2,0,1); cvmSet(p_callback_circle,2,1,1); cvmSet(p_callback_circle,2,2,1); cvmSet(p_callback_circle,2,3,1); PrintMat2(p_callback_circle, "p_callback_circle"); CvMat* p_dst_callback_circle=cvCreateMat(3,4,CV_32FC1);//图像上点的矩阵,竖着依次为u,v,1 p_dst_callback_circle=RankPoint(p_callback_circle); PrintMat2(p_dst_callback_circle, "p_dst_callback_circle"); return 0; }
运行结果: