2012-08-03 44 views
1

我正在从两台摄像机收集好帧,以进行立体摄像机校准。无法绘制棋盘角,因为断言cvCvColor方法失败

#include <iostream> 
    #include <cv.h> 
    #include <highgui.h> 
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <sstream> 

    using namespace std; 

    int main() { 

    CvCapture* videocapture_CAM0=cvCreateCameraCapture(0);  
    CvCapture* videocapture_CAM1=cvCreateCameraCapture(1); 

    IplImage* img_0;  
    IplImage* img_1; 

    int nx=4,ny=3; 

    int i, j, nframes, n = nx*ny; 

    vector<CvPoint2D32f> temp_0(n);  
    vector<CvPoint2D32f> temp_1(n); 

    CvSize imageSize_0 = {0,0};  
    CvSize imageSize_1 = {0,0}; 

    while(1) 
    { 
     int count_0 = 0,count_1 = 0; 
     int result_0 = 0,result_1 = 0; 

     img_0=cvQueryFrame(videocapture_CAM0); 
     img_1=cvQueryFrame(videocapture_CAM1); 

     imageSize_0 = cvGetSize(img_0); 
     imageSize_1 = cvGetSize(img_1);  

     cvShowImage("camera 1", img_0); 
     cvShowImage("camera 2", img_1); 

     IplImage* timg_0 = img_0; 
     IplImage* timg_1 = img_1; 

     result_0 = cvFindChessboardCorners(timg_0, cvSize(nx, ny), &temp_0[0], &count_0, 
          CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_NORMALIZE_IMAGE); 

     result_1 = cvFindChessboardCorners(timg_1, cvSize(nx, ny), &temp_1[0], &count_1, 
          CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_NORMALIZE_IMAGE); 

     if(result_0&&result_1) 
     { 
      cout<<"Found"<<endl; 

      IplImage* cimg_0 = cvCreateImage(imageSize_0, 8, 3);    

      IplImage* cimg_1 = cvCreateImage(imageSize_1,8,3); 

      cvCvtColor(img_0, cimg_0, CV_GRAY2BGR); 
      cvCvtColor(img_1, cimg_1, CV_GRAY2BGR); 

      cvDrawChessboardCorners(cimg_0, cvSize(nx, ny), &temp_0[0], count_0, 
            result_0); 

      cvDrawChessboardCorners(cimg_1, cvSize(nx, ny), &temp_1[0], count_1, 
            result_1); 

      cvShowImage("corners", cimg_0); 
      cvShowImage("corners", cimg_1); 

      cvReleaseImage(&cimg_0); 
      cvReleaseImage(&cimg_1); 

      cvWaitKey(5); 

     } 
     char c=cvWaitKey(30); 
     if(c==27) 
     break; 
    } 
    return 0; 
    } 

,但我发现在运行时一个奇怪的错误: -

OpenCV Error: Assertion failed (scn == 1 && (dcn == 3 || dcn == 4)) in cvtColor, 
file C:\opencv\modules\imgproc\src\color.cpp, line 3234 

另外,我还检查了尺寸和源和目标图像的N沟道值相等。

在此先感谢!

回答

2

断言非常明确scn == 1表示您的源图像必须有一个通道(这就是您指定的CV_GRAY2BGR作为cvCvtColor的转换代码)。

+0

先生,你的意思是我应该将我的源图像先转换为灰度图像,然后再在cvCvtColor方法中使用它? – 2012-08-03 09:51:57

+0

不,我的意思是你的源图像已经在BGR中。没有必要进行转换。 – Mohammad 2012-08-03 10:26:35