c++ - OpenCV 错误 : Camera Calibration: Assertion failed in matrix_wrap. cpp

标签 c++ opencv camera-calibration assertion

错误:

OpenCV(3.4.1) Error: Assertion failed (i < 0) in cv::debug_build_guard::_InputArray::getMat_, 
file C:\build\master_winpack-build-win64-vc15\opencv\modules\core\src\matrix_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;
}

我想使用带有直线棋盘的基本相机校准。 直到函数“calibrateCamera”一切正常,但我不明白为什么会出现这个错误。

“objectPoints”和“imagePoints”的大小相同。 提前谢谢你。

附言: 我是这个论坛的新手,也是 OpenCV 的新手;)

最佳答案

根据 this source of 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>>

关于c++ - OpenCV 错误 : Camera Calibration: Assertion failed in matrix_wrap. cpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51159829/

相关文章:

C++ getline inside while loop 缺少第一个字母。没有 cin.ignore 不工作?

c++ - 在 Linux 上自行分发专有软件?

c++ - 找出是否在共享库中调用了函数

opencv - python cv2.calibrateCamera 的输入参数

opencv - cv::solvePnPRansac返回单位矩阵

c++ - 未知的模板函数返回类型,使用 decltype 时代码重复

Python OpenCV - 网络摄像头捕获返回空白屏幕

python - 使用图像作为卷积核

python - 保存来自自动编码器的解码图像

image-processing - 使用单应性描述两个图像之间的非线性变换