首页 > 代码库 > opencv_将图像上的4个点按逆时针排序
opencv_将图像上的4个点按逆时针排序
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:\n", name); for (int i=0; i<target->rows; i++) { for (int j=0; j<target->cols;j++) { printf("%f\t", cvmGet(target, i,j)); } printf("\n"); }}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=4;j>0;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;}
运行结果:
opencv_将图像上的4个点按逆时针排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。