В выводимом изображени мне необходимо скорректировать "рыбий глаз", не очень большой, но всё же. Для начала решил воспользоваться OpenCV (http://docs.opencv.org/ref/master/db/d58/group__calib3d__fisheye.html).
С помощью функции cv::fisheye::calibrate получил первичные коэффициенты и применяю их к изображению:
Код: Выделить всё
cv::Matx33d K(_coefficient.fx, 0, _coefficient.cx, 0, _coefficient.fy, _coefficient.cy, 0, 0, 1);
cv::Vec4d D(_coefficient.k1, _coefficient.k2, _coefficient.k3, _coefficient.k4);
cv::fisheye::undistortImage(out, _rgb, K, D);
Но функция вываливается с сообщением - OpenCV Error: Assertion failed ((P.depth() == CV_32F || P.depth() == CV_64F) && (R.depth() == CV_32F || R.depth() == CV_64F)) in initUndistortRectifyMap, file /opencv/modules/calib3d/src/fisheye.cpp, line 409
P и R в функции соответствуют моим переменным K и D.
Другой вариант кода заканчивается аналогичным сообщением:
Код: Выделить всё
std::vector<qreal> K(9);
std::vector<qreal> D(4);
K.push_back(_coefficient.fx);
K.push_back(0);
K.push_back(_coefficient.cx);
K.push_back(0);
K.push_back(_coefficient.fy);
K.push_back(_coefficient.cy);
K.push_back(0);
K.push_back(0);
K.push_back(1);
D.push_back(_coefficient.k1);
D.push_back(_coefficient.k2);
D.push_back(_coefficient.k3);
D.push_back(_coefficient.k4);
Вопрос - как правильно сформировать массивы коэффициентов?
Спасибо.