OpenCV 错误:相机校准:断言在matrix_wrap.cpp失败
OpenCV Error: Camera Calibration: Assertion failed in matrix_wrap.cpp
错误:
OpenCV(3.4.1) Error: Assertion failed (i < 0) in cv::debug_build_guard::_InputArray::getMat_,
file C:buildmaster_winpack-build-win64-vc15opencvmodulescoresrcmatrix_wrap.cpp, line 50
"matrix_wrap.cpp"中触发错误的代码:
if( k == STD_VECTOR )
{
CV_Assert( i < 0 );
int t = CV_MAT_TYPE(flags);
const std::vector<uchar>& v = *(const std::vector<uchar>*)obj;
return !v.empty() ? Mat(size(), t, (void*)&v[0]) : Mat();
}
整个代码:
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc, char *argv[])
{
cv::Mat img = cv::imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
cv::Size imageSize = cv::Size(img.size[0], img.size[1]);
cv::Mat cameraMatrix, distCoeffs;
double squareSize = 30;
cv::Size boardSize = cv::Size(6, 11);
std::vector<cv::Point2f> imagePoints;
std::vector<cv::Point3f> objectPoints;
for (int i = 0; i < boardSize.height; i++) {
for (int j = 0; j < boardSize.width; j++) {
objectPoints.push_back(
cv::Point3f(float(j * squareSize), float(i * squareSize), 0));
}
}
std::vector<cv::Mat> rvecs, tvecs;
bool found = false;
if (img.size[0] > 1)
{
bool found = findChessboardCorners(img, boardSize, imagePoints, cv::CALIB_CB_ADAPTIVE_THRESH);
if (found)
{
drawChessboardCorners(img, boardSize, imagePoints, found);
}
objectPoints.resize(imagePoints.size(), objectPoints[0]);
double rms = calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs);
cv::namedWindow("My Image");
cv::imshow("My Image", img);
cv::waitKey(1000);
}
return 0;
}
我想使用带有杂散棋盘的基本相机校准。 在"校准相机"功能之前一切正常,但我无法弄清楚为什么会出现此错误。
"objectPoints"和"imagePoints"的大小是相同的。 提前谢谢你。
附言: 我是这个论坛的新手,也是OpenCV;)
根据 opencv 的来源,第 3139 和 3142 行:
CV_Error(CV_StsUnsupportedFormat, "objectPoints should contain vector of vectors of points of type Point3f");
CV_Error(CV_StsUnsupportedFormat, "imagePoints1 should contain vector of vectors of points of type Point2f");
objectPoints
和imagePoints
的类型应std::vector<std::vector<Point{2|3}f>>
相关文章:
- Eigen - matrix.transpose 会创建矩阵的副本吗?
- 将 OpenCV-Matrix 转换为矢量
- C++在函数中创建的对 Eigen::Matrix 的悬空引用
- 为什么我们必须在 C++ 中释放数组数组,而不仅仅是整个"matrix"
- Nan::ObjectWrap to Napi::Object Wrap 无法访问 JavaScript 中的属性
- 为什么我不能从 Eigen::Matrix 继承?
- r-在Rcpp和C++之间转换矢量(使用Rcpp::as或Rcpp:::wrap)是否会创建一个新的矢量并复制元素
- 使用 'Eigen::Matrix' 创建 'alglib::integer_1d_array'
- MATLAB API用于使用MatgetDir的C例外:Matrix :: Serialize ::在内存位置内置
- C++ ld 链接器 --wrap 选项不适用于内部函数调用
- 特征"Sparse matrix format"示例是否包含错误?
- 是否存在与 Eigen::Matrix<>constexpr 构造函数相关的信息?
- What wrong with `(A.array() == A.array()).matrix()`?
- 如何从eigen :: matrix获取内存所有权
- matrix.size() 和 matrix[0].size() 有什么区别?
- 从类型 'Matrix&' 的右值初始化 类型的非 const 引用无效 'Matrix'
- 如何将 Eigen Jacobi SVD 与 Eigen Affine Matrix一起使用
- Map Eigen replicate Matrix
- 带有Boost Python的Wrap C 功能 - Numpy数组类型
- | 9 |错误:非静态数据成员'matrix :: row'| 9 |错误:数组绑定不是在']']'令牌|之前的整数常数