|
#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("Win1",img);
char ch=cvWaitKey(10);
if(ch !=-1)
break;
}
*/
char A[][50]={"C:\\My_OpenCV\\Picture\\chess0.bmp","C:\\My_OpenCV\\Picture\\chess1.bmp","C:\\My_OpenCV\\Picture\\chess2.bmp"};
img=cvLoadImage(A[num_a++]);
assert(num_a<=3);
cvShowImage("Win1",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<<" "<<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("Win1",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 |
|