C#使用solvepnp四组点对相机标定,第5组点验证C#实现

本文介绍了如何使用C#实现基于P3P算法的相机标定,通过四组点对计算R和T矩阵,并通过第五组点进行误差验证。详细步骤包括读取坐标数据、计算矩阵以及误差分析。软件界面直观,代码中引用了OpenCvSharp库。
摘要由CSDN通过智能技术生成

标题最近做的项目需要用C#做对相机标定的软件,网上C++实现的代码一堆,C#实现的几乎没有,查了很多资料,花了将近4天才做出来这个软件,使用的P3P算法接下来把原理和代码贴出来,大家共同学习。

软件界面如图下图所示:
我这是把四组大地坐标和四座像素点坐标分为两个txt文件读取的,得到的数据显示和验证结果在界面显示,更直观些。我随便找的四组坐标,四组用来计算R,T矩阵,一组用来验证误差。最后计算的像素差值误差也很小,下面软件我使用的是准确的真实数据。
在这里插入图片描述

首先下载图片中OpenCvSharp3的库在首先在这里插入图片描述
代码里面引用加入using OpenCvSharp,如

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;
using System.Data;

四组大地的坐标写入List(注:做项目的话需要输入准确的数据,一个大地坐标对应着一个像素坐标。项目公司提供的数据我就不写出来了,以下的坐标数值和相机参数是我随便设置的数字):

 List<Point3f> threeDim = new List<Point3f>()
            {
   
                new Point3f(100f, 200f, 300f),
             new Point3f(400f, 500f, 600f),
             new Point3f(700f, 800f, 900f),
             new Point3f(600f, 800f, 200f),            
            };

四组像素的坐标写入List:

 List<Point2f> twoDim = new List<Point2f>()
            {
   
                 new Point2f(100f, 200f),
            new Point2f(400f, 500f),
            new Point2f(700f, 800f), 
            new Point2f(900f, 100f),              
            };
double[] camD = new double[9] {
    2, 0, 99.5, 0, 21.83, 39.5, 0, 0, 1 };
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值