OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 4580|回复: 2

标正摄像机的问题

[复制链接]
发表于 2011-7-15 21:18:28 | 显示全部楼层 |阅读模式
#define WIDTH_C 7//board w
#define HEIGHT_C 7//board n


#include "iostream"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include "math.h"





void main(){
// IplImage * img=cvLoadImage("C:\\My_OpenCV\\Picture\\1.bmp",1);

cvNamedWindow("Win1");
CvCapture * cap=cvCreateCameraCapture(0);
IplImage * img;


int success=0,SUC=3;


CvMat * image_points=cvCreateMat(WIDTH_C*HEIGHT_C,2,CV_32FC1);
CvMat * object_points=cvCreateMat(WIDTH_C*HEIGHT_C,3,CV_32FC1);
CvMat * point_counts=cvCreateMat(WIDTH_C*HEIGHT_C,1,CV_32SC1);

CvMat * intrinsic_matrix=cvCreateMat(3,3,CV_32FC1);
CvMat * distortion_coeffs=cvCreateMat(5,1,CV_32FC1);


CvPoint2D32f * corners=new CvPoint2D32f[WIDTH_C*HEIGHT_C];

int step=0,frame=0,num_a=0;

while(success<SUC){


/* while(1){
img=cvQueryFrame(cap);
cvShowImage(&quot;Win1&quot;,img);
char ch=cvWaitKey(10);
if(ch !=-1)
break;
}
*/

char A[][50]={&quot;C:\\My_OpenCV\\Picture\\chess0.bmp&quot;,&quot;C:\\My_OpenCV\\Picture\\chess1.bmp&quot;,&quot;C:\\My_OpenCV\\Picture\\chess2.bmp&quot;};

img=cvLoadImage(A[num_a++]);
assert(num_a<=3);
cvShowImage(&quot;Win1&quot;,img);

IplImage * img_1=cvCreateImage(cvGetSize(img),8,1);
cvCvtColor(img,img_1,CV_RGB2GRAY);


int cornercount,re;

re=cvFindChessboardCorners(img,cvSize(WIDTH_C,HEIGHT_C),corners,&cornercount);

std::cout<<re<<&quot; &quot;<<cornercount<<std::endl;

cvFindCornerSubPix(img_1,corners,cornercount,cvSize(11,11),cvSize(-1,-1),cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,30,0.1));

cvDrawChessboardCorners(img,cvSize(3,3),corners,cornercount,re);

cvShowImage(&quot;Win1&quot;,img);

cvWaitKey(0);


//到此为止找到棋盘各个亚像素角点

if(cornercount!=WIDTH_C*HEIGHT_C)
continue;


//存储

step=success*WIDTH_C*HEIGHT_C;
for( int i=step, j=0; j<WIDTH_C*HEIGHT_C; ++i,++j ) {
CV_MAT_ELEM(*image_points, float,i,0) = corners[j].x; //这里就是87行!!!!!!!问题出在这里,第一张图像没问题,在第二次(第二章图片)的时候,报错
CV_MAT_ELEM(*image_points, float,i,1) = corners[j].y;
CV_MAT_ELEM(*object_points,float,i,0) = j/WIDTH_C;
CV_MAT_ELEM(*object_points,float,i,1) = j%WIDTH_C;
CV_MAT_ELEM(*object_points,float,i,2) = 0.0f;
}

CV_MAT_ELEM(*point_counts, int,success,0) = WIDTH_C*HEIGHT_C;
success++;


}

//接下来是获得摄像机畸形矩阵

cvWaitKey(0);

}

第一张图像识别出棋盘、记录都梅问题,第二章的时候就出问题了,抱错:
assertion failedunsigned)(i) < (unsigned)(*image_points).row && (unsigned)(0) < (unsigned)(*image_points).cols,file ... line87
回复

使用道具 举报

发表于 2011-11-30 18:32:03 | 显示全部楼层

标正摄像机的问题

你好 我也在做摄像机标定,但是标定每次的内部参数不一样。
回复 支持 反对

使用道具 举报

发表于 2012-4-16 09:37:33 | 显示全部楼层

标正摄像机的问题

你好,我刚刚接触opencv,我在做摄像机标定,源代码有,但是插上摄像机不知道怎么进行标定,求指教
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-19 16:42 , Processed in 0.009532 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表