- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 OpenCV 使用 C++ 进行相机校准。问题是对于 calibrateCamera() 函数我得到这个错误:
OpenCV Error: Unsupported format or combination of formats (objectPoints should contain vector of vectors of points of type Point3f) in cv::collectCalibrationData, file C:\builds\master_PackSlave-win64-vc12-shared\opencv\modules\calib3d\src\calibration.cpp, line 3060
这是我的代码:
template <typename T>
string NumberToString ( T Number )
{
stringstream ss;
ss << Number;
return ss.str();
}
int main()
{
int numBoards = 20;
int numCornersHor = 8;
int numCornersVer = 5;
float squareLenght = 30.0;
string commonFileName = "D:\\IMG_11";
string fileType = ".JPG";
int fileNum = 7;
string fileNumStr;
Size ImgSize(816, 612);
int numSquares = numCornersHor * numCornersVer;
Size board_sz = Size(numCornersHor, numCornersVer);
vector<vector<Vec3f>>object_points;
vector<vector<Vec2f>>image_points;
vector<Vec3f>obj;
vector<Vec2f>corners;
Mat cameraMatrix, distCoeffs;
Size imageSize;
int successes=0;
Mat image;
Mat gray_image;
fileNumStr = NumberToString(fileNum);
if (fileNum <10)
fileNumStr = "0"+ NumberToString(fileNum);
image = imread(commonFileName+fileNumStr+fileType,1);
resize(image,image, ImgSize);
fileNum++;
obj.clear();
for(int i = 0; i<numCornersVer; i++){
for(int j=0;j<numCornersHor;j++){
obj.push_back(Vec3f(float(j*squareLenght/1.0),float(i*squareLenght/1.0),0.0f));
}
}
while(successes<numBoards)
{
cvtColor(image, gray_image, CV_BGR2GRAY);
bool found = findChessboardCorners(image, board_sz, corners, CV_CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_NORMALIZE_IMAGE);
if(found)
{
cornerSubPix(gray_image, corners, Size(11, 11), Size(-1, -1), TermCriteria(TermCriteria::EPS+TermCriteria::COUNT, 30, 0.1));
drawChessboardCorners(image, board_sz, Mat(corners), found);
image_points.push_back(corners);
object_points.push_back(obj);
successes++;
if(successes>=numBoards)
break;
}
//imshow("win1 "+ fileNumStr, image);
//imshow("win2 " + fileNumStr, gray_image);
fileNumStr = NumberToString(fileNum);
if (fileNum <10)
fileNumStr = "0"+ NumberToString(fileNum);
image = imread(commonFileName+fileNumStr+fileType,1);
resize(image,image, ImgSize);
fileNum++;
int key = waitKey(1);
if(key==27)
return 0;
}
vector<Mat> rvecs;
vector<Mat> tvecs;
cameraMatrix = Mat::eye(3, 3, CV_64F);
distCoeffs = Mat::zeros(8, 1, CV_64F);
intrinsic.ptr<float>(0)[0] = 1;
intrinsic.ptr<float>(1)[1] = 1;
double rms = calibrateCamera(object_points, image_points, image.size(), cameraMatrix, distCoeffs, rvecs, tvecs);
Mat imageUndistorted;
return 0;
}
我发现另一个人对 python 有类似的问题 here但我找不到用 C++ 测试这些答案的正确方法。请帮我解决这个错误。
谢谢。
最佳答案
尝试将 object_points 转换为 Point3f vector 的 vector ,并将 image_points 转换为 Point2f vector 的 vector ,您粘贴的错误暗示了这一点。在您的代码中,您使用的是 Vec3f 和 Vec2f 而不是 Point3f/2f
关于c++ - 使用 C++ 进行 OpenCv 相机校准(不支持的格式或格式组合错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35903732/
使用 Kinect for Windows SDK,校准相机的最简单方法是什么? 我找到了这篇可爱的博文 http://nicolas.burrus.name/index.php/Research/K
我最初在 OpenCV 论坛上发布了这个,但不幸的是,我没有得到太多的意见/回复,所以我在这里发布是希望有人可能有方向建议? 我正在使用 Bumblebee XB3 立体相机,它有 3 个镜头。我花了
当移动很远的距离时,比如去另一个城市,关闭 GPS,打开它需要很长时间才能找到第一个正确的点。 因此,如果我通过示例注册到 gps 提供程序,则可能需要 10 分钟才能收到第一个 onLocation
在我的应用中,我使用加速度计来控制游戏中的角色。现在我只允许纵向,所以用户必须向右或向左倾斜设备才能移动角色。到目前为止一切正常。我现在想要完成的是“校准”加速度计以考虑用户正在玩的当前倾斜度。假设用
我使用 2 个 CANON EOS60d 作为立体设置来进行摄影测量。我正在使用 OpenCV 使用高精度 Circlegrid 校准模式校准两个相机。我正在使用信号发生器同时触发两个相机,早些时候我
我花了很长时间才让函数在 OpenCV 中运行,所以我想知道我的总体计划是否有意义,然后再深入研究尝试实现它的细节。 (2.3.1、Windows 7、C++)如果有任何建议,我将不胜感激。 问题:
我注意到 h2o.ai 套件的一个相对较新的添加,能够执行补充 Platt Scaling 以改进输出概率的校准。 (请参阅 calibrate_model in h2o manual 。)不过,在线
我正在尝试在 STM32F042 微 Controller 上读取 VDDA。我在 VDD 为 3.29V 时得到了意想不到的结果。我一定缺少一些基本的东西。 输出: VREFINT=1917; VR
请原谅我对编码完全陌生。首先,出于该项目的目的,我正在使用 Python 绑定(bind)到 OpenCV 的库。 我的相机已针对显示鱼眼失真进行了校准。我分别获得了 K 和 D 的以下值,即固有相机
如何使用 Netbeans 8.1 进行 JDK 校准。我用谷歌搜索了一些并找到了这个链接 here . It says "choose Profile > Advanced Commands > R
我目前正在开发增强现实应用程序。目标设备是光学透视 HMD,我需要校准其显示器以实现虚拟对象的正确注册。我用过那个implementation of SPAAM对于 android 来说,结果对于我的
我是一名优秀的程序员,十分优秀!