各位大佬好,萌新有一个问题请教。官方Demo生成的标定板是(150,150,150)的灰色的,之前打印的误差有点大。为了提高精度,我定制了一款黑白的标定板。在系统标定(第5步)时,投射出的投影仪标定图案和标定板重合,所以总是不成功,该如何解决?是不是这步的标定不能用黑白板?谢谢!
Jeremy Wu:
提供不成功的错误信息, 应该有提示对应代码中有调试信息.您的checkerboard使用什么灰度的如果不用150?
Jeremy Wu:
回复 Jeremy Wu:
在 DLP-ALC-LIGHTCRAFTER-SDK-2.0\DLP-ALC-LIGHTCRAFTER-SDK\src\calibration
calibration_camera.cpp
749行有检测checker board的function,反馈每个对应的错误信息的.
Calibration::Camera::AddCalibrationBoard
// Check the image resolution this->debug_.Msg("Checking calibration image resolution…"); unsigned int rows = 0; unsigned int cols = 0; calib_image.GetRows(&rows); calib_image.GetColumns(&cols);
if((rows != this->image_rows_.Get()) || (cols != this->image_columns_.Get())){ return ret.AddError(CALIBRATION_IMAGE_RESOLUTION_INVALID); }
// Copy the image this->debug_.Msg("Copying calibration image…"); dlp::Image temp_calibration_image; temp_calibration_image.Create(calib_image);
// If the image is RGB convert it to greyscale this->debug_.Msg("Converting calibration image to monochrome…");
if(temp_calibration_image.ConvertToMonochrome().hasErrors()) return ret.AddError(CALIBRATION_IMAGE_CONVERT_TO_MONO_FAILED);
// Convert dlp::Image to cv::Mat cv::Mat calibration_image_cv; temp_calibration_image.GetOpenCVData(&calibration_image_cv);
// Look for the chessboard (checkerboard corners this->debug_.Msg("Looking for chessboard corners in calibration image…"); std::vector<cv::Point2f> board_feature_locations_xy; cv::Size board_feature_size(this->board_columns_.Get(),this->board_rows_.Get()); if (cv::findChessboardCorners(calibration_image_cv, board_feature_size, board_feature_locations_xy, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS )){
this->debug_.Msg("Chessboard corners found"); this->debug_.Msg("Refining corner locations…");
// Board was found. Refine the corner positions // NOTE : Many of these arguments would be good parameter settings for calibration cv::cornerSubPix(calibration_image_cv, board_feature_locations_xy, cv::Size(11, 11), cv::Size(-1, -1), cv::TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 30, 0.1));
// Return success as true and increment counter (*success) = true; this->board_number_successes_++;
// Add this calibration image's corners to the list this->image_points_xy_.push_back(board_feature_locations_xy); this->object_points_xyz_.push_back(this->calibration_board_feature_points_xyz_);
this->debug_.Msg("Calibration image added"); } else{ this->debug_.Msg("No chessboard corners found in calibration image"); (*success) = false; ret.AddError(CALIBRATION_BOARD_NOT_DETECTED); }
// Release the cv image calibration_image_cv.release();
return ret;
user5130502:
回复 Jeremy Wu:
您好,谢谢回复。它的提示就是找不到标定板,然后给出了几条建议什么的。我用的是(0,0,0)的标定板
Jeremy Wu:
回复 user5130502:
DLP_3D_SDK_DLP4500.pdf按照提示的信息更改,通常的问题点参考附件.