opencv - OpenCV fisheye::projectpoints 断言失败
问题描述
我想在使用opencv 4.0.1 c++的图像上投影一个点(-1450,-1660)我有相机矩阵和失真系数,我的代码是
vector <Point3f> inputpoints;
Point3f myPoint;
myPoint.x = -1450;
myPoint.y = -1660;
myPoint.z = 0;
inputpoints.push_back(myPoint);
vector<Point2f> outputpoints;
vector<Point3f> tvec;
tvec.push_back(Point3f(0, 0, 0));
vector<Point3f> rvec;
rvec.push_back(Point3f(0, 0, 0));
double mydata[9] = { 3.3202343554882879e+02, 1., 6.4337059696010670e+02, 0, 3.3196938477610536e+02, 5.3844814394773562e+02, 0., 0., 1. };
Mat mycameraMatrix = Mat(3, 3, CV_64F, mydata);
double mydata2[4] = { -1.1129472191078109e-03, 4.9443845791693870e-02,
-7.2244333582166609e-03, -1.7309984187889034e-03 };
Mat mydiscoff = Mat{ 4,1, CV_64F ,mydata2 };
Mat newCamMat1= Mat(3, 3, CV_64F);
cv::fisheye::projectPoints(inputpoints, rvec, tvec, mycameraMatrix, mydiscoff, outputpoints);
当我运行程序时,我得到了这个异常
OpenCV(4.0.1) Error: Assertion failed (mtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN(type0) && ((1 << type0) & fixedDepthMask) != 0)) in cv::debug_build_guard::_OutputArray::create, file c:\build\master_winpack-build-win64-vc15\opencv\modules\core\src\matrix_wrap.cpp, line 1395
我将相机矩阵的类型和畸变系数更改为 CV_32f 但我仍然遇到同样的错误,我是 openCV 的初学者 ..所以谁能告诉我是什么导致了这个异常?我知道 rvec 应该是 3*3 但我只是跟着别人写的代码可以这样写
解决方案
好的,问题是 projectpoints 和 fisheye::projectpoints 的参数顺序不同..所以我把属于 projectpoints 的顺序放在了
推荐阅读
- react-router - 为什么 React TestingLibrary 包裹在 MemoryRouter 中时无法渲染 DOM 节点?
- javascript - Google Drive Picker API - 显示文件夹和某些 mime 类型文件
- python - 缺少工具社区版与专业版 Pycharm
- reactjs - 如何在子对话框打开后关闭父对话框,使用 Material UI React
- r - 如何删除R中文件的最后一位?
- python - 从网页中解析出文本
- docker - Google App Engine 日志“找不到指定的框架‘Microsoft.AspNetCore.App’,版本‘2.1.1’。”
- sql - 如何设计表以允许在一行上进行多字段查询
- c# - 在 .net 4.5 中的 web.config 中覆盖 Machine.config 的值
- ruby - 如何将 Bugsnag 通知发送到 stderr?