zoukankan      html  css  js  c++  java
  • 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:
    ", 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;
    }

    运行结果:

  • 相关阅读:
    Excel2010表格里设置每页打印时都有表头
    新手常见Python运行时错误
    如何查看某个端口被谁占用
    ubuntu更换阿里源
    c# 值类型与引用类型(转)
    vs2015 企业版 专业版 密钥
    csdn中使用Git的一些注意问题
    在notepad++中快速插入当前时间方法
    EF6 code first 新建项目注意问题
    vs2015新建web应用程序空模板和添加webapi的模板生成文件的比较
  • 原文地址:https://www.cnblogs.com/lovemi93/p/5867649.html
Copyright © 2011-2022 走看看