cvFindExtrinsicCameraParams2函数的定义:

 void cvFindExtrinsicCameraParams2( const CvMat* object_points,
const CvMat* image_points,
const CvMat* intrinsic_matrix,
const CvMat* distortion_coeffs,
CvMat* rotation_vector,
CvMat* translation_vector );

 #include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <stdlib.h> int n_boards = ; //Will be set by input list
const int board_dt = ;
int board_w;
int board_h; void help()
{
printf("Calibration from disk. Call convention:\n\n"
"Where: board_{w,h} are the # of internal corners in the checkerboard\n"
" width (board_w) and height (board_h)\n"
" image_list is space separated list of path/filename of checkerboard\n"
" images\n\n"
"Hit 'p' to pause/unpause, ESC to quit. After calibration, press any other key to step through the images\n\n");
} int main(int argc, char* argv[])
{ CvCapture* capture;// = cvCreateCameraCapture( 0 );
// assert( capture ); if(argc != )
{
help();
return -;
}
help();
board_w = atoi(argv[]);
board_h = atoi(argv[]);
int board_n = board_w * board_h;
CvSize board_sz = cvSize( board_w, board_h );
FILE *fptr = fopen(argv[],"r");
char names[];
//COUNT THE NUMBER OF IMAGES:
while(fscanf(fptr,"%s ",names)==)
{
n_boards++;
}
rewind(fptr); cvNamedWindow( "Calibration" );
//ALLOCATE STORAGE
CvMat* image_points = cvCreateMat(board_n,,CV_32FC1);
CvMat* object_points = cvCreateMat(board_n,,CV_32FC1);
//CvMat* point_counts = cvCreateMat(1,CV_32SC1); CvMat *intrinsic = (CvMat*)cvLoad("Intrinsicsr.xml");
CvMat *distortion = (CvMat*)cvLoad("Distortionr.xml");
CvMat* rotation_vector=cvCreateMat(,,CV_32FC1);
CvMat* translation_vector=cvCreateMat(,,CV_32FC1);
CvMat* rotation_mat=cvCreateMat(,,CV_32FC1);
CvMat* jacobian=cvCreateMat(,,CV_32FC1); IplImage* image = ;// = cvQueryFrame( capture );
IplImage* gray_image = ; //for subpixel
CvPoint2D32f* corners = new CvPoint2D32f[ board_n ];
int corner_count; fscanf(fptr,"%s ",names);
image = cvLoadImage( names);
if(gray_image == && image) //We'll need this for subpixel accurate stuff
gray_image = cvCreateImage(cvGetSize(image),,); if(!image)
printf("null image\n"); int found = cvFindChessboardCorners(
image,
board_sz,
corners,
&corner_count,
CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS
); //Get Subpixel accuracy on those corners
cvCvtColor(image, gray_image, CV_BGR2GRAY);
cvFindCornerSubPix(gray_image, corners, corner_count,
cvSize(,),cvSize(-,-), cvTermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, , 0.1 ));
//Draw it cvDrawChessboardCorners(image, board_sz, corners, corner_count, found);
cvShowImage( "Calibration", image );
if( corner_count == board_n )
printf("Found = %d for %s\n",found,names);
for( int i=; i<board_n; ++i )
{
CV_MAT_ELEM(*image_points, float,i,) = corners[i].x;
CV_MAT_ELEM(*image_points, float,i,) = corners[i].y;
CV_MAT_ELEM(*object_points,float,i,) = i/board_w;
CV_MAT_ELEM(*object_points,float,i,) = i%board_w;
CV_MAT_ELEM(*object_points,float,i,) = 0.0f;
} cvFindExtrinsicCameraParams2(
object_points,image_points,intrinsic,distortion,rotation_vector,translation_vector
);
cvRodrigues2(
rotation_vector,rotation_mat,jacobian=NULL
);
cvSave("Rotationr.xml",rotation_mat);
cvSave("Translationr.xml",translation_vector);
}

利用cvFindExtrinsicCameraParams2求取相机外参数的更多相关文章

  1. [笔记]ACM笔记 - 利用FFT求卷积(求多项式乘法)

    卷积 给定向量:, 向量和: 数量积(内积.点积): 卷积:,其中 例如: 卷积的最典型的应用就是多项式乘法(多项式乘法就是求卷积).以下就用多项式乘法来描述.举例卷积与DFT. 关于多项式 对于多项 ...

  2. poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数

    poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数 题目大意:如题目所示 给你一些关系图——连通图,想要问你有没有个节点,损坏后,可以生成几个互相独立的网络(也就是连通分量), ...

  3. Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负

    /** 题目:Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负 链接:https://vjudge.net/problem/UVA-1161 ...

  4. 利用JS获取地址栏的中文参数

    地址栏中为:localhost:22865/ZYHSYY.aspx?BQH=305&DoctorName=张三&DoctorId=100我想利用JS获取到“张三”,请问该如何写js?目 ...

  5. C#利用phantomJS抓取AjAX动态页面

    在C#中,一般常用的请求方式,就是利用HttpWebRequest创建请求,返回报文.但是有时候遇到到动态加载的页面,却只能抓取部分内容,无法抓取到动态加载的内容. 如果遇到这种的话,推荐使用phan ...

  6. 使用C#版OpenCV进行圆心求取

    OpenCVSharp是OpenCV的.NET wrapper,是一名日本工程师开发的,项目地址为:https://github.com/shimat/opencvsharp. 该源码是 BSD开放协 ...

  7. 第3节 mapreduce高级:8、9、自定义分区实现分组求取top1

    自定义GroupingComparator求取topN GroupingComparator是mapreduce当中reduce端的一个功能组件,主要的作用是决定哪些数据作为一组,调用一次reduce ...

  8. 图像Stride求取

    原文:图像Stride求取 做这个日志也许你会觉得多余,但是,如果只给你了图像的流文件,和图像的Width,让你还原原始图像,那么你会发现一个问题,就是Stride未知的问题,这时就需要根据图像的Wi ...

  9. 线性时间求取第 K 大数

    求 Top K 的算法主要有基于快速排序的和基于堆的这两种,它们的时间复杂度都为 \(O(nlogK)\).借助于分治思想,以及快速排序的区间划分,我们可以做到 \(O(n)\) 时间复杂度.具体算法 ...

随机推荐

  1. pandas 7 合并 merge 水平合并,数据会变宽

    pd.merge( df1, df2, on=['key1', 'key2'], left_index=True, right_index=True, how=['left', 'right', 'o ...

  2. 紫书 习题 8-16 UVa 1618 (中途相遇法)

    暴力n的四次方, 然而可以用中途相遇法的思想, 分左边两个数和右边两个数来判断, 最后合起来判断. 一边是n平方logn, 合起来是n平方logn(枚举n平方, 二分logn) (1)两种比较方式是相 ...

  3. HTTP——学习笔记(5)

    我们通信的过程中会有哪些风险?: 1.HTTP不会对通信方的身份进行确认 因为HTTP协议中的请求和相应不会对通信方进行确认,就是不管发送或接收信息的人是不是之前的人,都不妨碍信息的发送或接收. 缺点 ...

  4. vjudge A - Beautiful numbers

    A - Beautiful numbers Volodya is an odd boy and his taste is strange as well. It seems to him that a ...

  5. 使用AFNetworking第三方下载类

    AFNetworking 眼下使用比較多得一个下载库 眼下一直在维护更新,使用的是很easy 不须要加入不论什么关联的库  1.带block形式 内部是任务队列进行下载  就是对operation的一 ...

  6. HDU 4965 Fast Matrix Calculation(矩阵高速幂)

    HDU 4965 Fast Matrix Calculation 题目链接 矩阵相乘为AxBxAxB...乘nn次.能够变成Ax(BxAxBxA...)xB,中间乘n n - 1次,这样中间的矩阵一个 ...

  7. Python Tkinter 基础控件学习

    # -*- coding: utf-8 -*- from Tkinter import * def btn_click(): b2['text'] = 'clicked' evalue = e.get ...

  8. RabbitMQ inequivalent arg 'durable' for exchange 'csExchange' in vhost '/': received

    错误:inequivalent arg 'durable' for exchange 'csExchange' in vhost '/': received 使用不同的MQ客户端时,常常会出现以上错误 ...

  9. Centos7+httpd+fastcgi+rails安装

    搭建的环境: centos7 Apache/2.4.6 fastcgi2.4.6 rails4 在安装fastcgi的时候遇到了问题: 问题: .... .. In file included fro ...

  10. BZOJ2179: FFT快速傅立叶 & caioj1450:【快速傅里叶变换】大整数乘法

    [传送门:BZOJ2179&caioj1450] 简要题意: 给出两个超级大的整数,求出a*b 题解: Rose_max出的一道FFT例题,卡掉高精度 = =(没想到BZOJ也有) 只要把a和 ...