gpt4 book ai didi

c++ - opencv相机标定(Assertion failed故障)

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:02 25 4
gpt4 key购买 nike

我正在尝试使用 opencv 相机校准函数获取相机校准参数。我有一个视频并试图找到校准参数并找到视频中包含不同 psoitions 的棋盘的点。但是我还不能通过校准阶段。我可以找到棋盘的一角并在 openCV 窗口中显示它们,但是当涉及到线时:

calibrateCamera(objectPoints,imagePoints..............) 

它抛出异常并停止。

我收到以下错误:OpenCV 错误:断言失败 0 &&nimages==int imagePoints1.total ()&&

这是我的代码:

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "C:/opencv/include/opencv/cv.h"

#include <iostream>
#include <math.h>

using namespace cv;
using namespace std;

std::vector<cv::Point2f> imageCorners;
std::vector<cv::Point3f> objectCorners;
std::vector<std::vector<cv::Point3f>> objectPoints;
std::vector<std::vector<cv::Point2f>> imagePoints;

void addPoints(const std::vector<cv::Point2f>&imageCorners, const std::vector<cv::Point3f>& objectCorners)
{
// 2D image points from one view
imagePoints.push_back(imageCorners);
// corresponding 3D scene points
objectPoints.push_back(objectCorners);
}
int main()
{

int key;
cv::Mat image;
cv::Mat gray_image;

VideoCapture cap("here goes path of the file");
if (!cap.isOpened()) // check if we succeeded
cout<<"failed";
else
cout<<"success";

cvNamedWindow( "video",0);

cv::Size boardSize(8,6);
// output Matrices
cv::Mat cameraMatrix;
std::vector<cv::Mat> rvecs, tvecs;
cv::Mat distCoeffs;

for (int i=0; i<boardSize.height; i++)
{
for (int j=0; j<boardSize.width; j++)
{
objectCorners.push_back(cv::Point3f(i, j, 0.0f));
}
}
int frame=1;
int corner_count=0;
while(1)
{
if(cap.read(image))
{
frame++;
if(frame%20==0)
{
if(waitKey(30) >= 0) break;

bool found = cv::findChessboardCorners(image, boardSize, imageCorners);

cvtColor( image, gray_image, CV_RGB2GRAY );


addPoints(imageCorners, objectCorners);

//bool found = cv::findChessboardCorners(image,boardSize, imageCorners);
cv::drawChessboardCorners(gray_image,boardSize, imageCorners,found);
imshow( "video", gray_image );
}
}
else
break;

}
int flag=0;
std::string text="";

for (int i=1; i<imagePoints.size();i++)
{
std::stringstream out;
out << imagePoints[i];
text=out.str();
cout<<text<<endl;

}

calibrateCamera(objectPoints,imagePoints,gray_image.size(), cameraMatrix, distCoeffs, rvecs, tvecs, flag);

return 0;

}

最佳答案

打印所有 std::vector 的大小,我怀疑您正在向该函数传递一个空 vector 。

编辑:

我在 this answer 中分享了一些说明关于如何进行相机校准。这些引用包括工作源代码。您可能需要对这些程序进行一些小的改编,以便它们使用视频代替。

关于c++ - opencv相机标定(Assertion failed故障),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8368255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com