Я создаю алгоритм видения, который реализован в S-функции Simulink (который является кодом C++). Я выполнил все, что нужно, кроме выравнивания цвета и глубины.Слияние изображений rgb и глубины с kinect
Мой вопрос в том, как я могу сделать 2 изображения друг для друга. другими словами, как я могу сделать трехмерное изображение с opencv.
Я знаю, что мой вопрос может быть немного расплывчатым поэтому я включу мой код, который объяснит вопрос
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int argc, char** argv)
{
// reading in the color and depth image
Mat color = imread("whitepaint_col.PNG", CV_LOAD_IMAGE_UNCHANGED);
Mat depth = imread("whitepaint_dep.PNG", CV_LOAD_IMAGE_UNCHANGED);
// show bouth the color and depth image
namedWindow("color", CV_WINDOW_AUTOSIZE);
imshow("color", color);
namedWindow("depth", CV_WINDOW_AUTOSIZE);
imshow("depth", depth);
// thershold the color image for the color white
Mat onlywhite;
inRange(color, Scalar(200, 200, 200), Scalar(255, 255, 255), onlywhite);
//display the mask
namedWindow("onlywhite", CV_WINDOW_AUTOSIZE);
imshow("onlywhite", onlywhite);
// apply the mask to the depth image
Mat nocalibration;
depth.copyTo(nocalibration, onlywhite);
//show the result
namedWindow("nocalibration", CV_WINDOW_AUTOSIZE);
imshow("nocalibration", nocalibration);
waitKey(0);
destroyAllWindows;
return 0;
}
Как можно видеть на выходе моя программа, когда я применяю единственную маску к изображению глубины, тело квадроциклов не состоит из 1 цвета. Причина этого в том, что между двумя изображениями есть совпадение.
Я знаю, что мне нужны параметры калибровки моей камеры, и я получил их от последнего человека, который работал с этой установкой. Была ли калибровка в Matlab, и это привело к следующему.
Я провел наделите время нижеследующего OpenCV страницы о калибровке камеры и 3D-реконструкции (не может включать в себя ссылку из-за стек обмен лвл)
Но я не могу для жизни меня выясняет, как я мог бы выполнить мою задачу добавить правильное значение глубины для каждого цветного пикселя.
Я пробовал использовать recjectImageTo3D(), но я не могу определить Q-матрицу. Я также попробовал выделить другие функции с этой страницы, но я не могу понять, что мои входы исправлены.
Если вы пишете свой собственный Simulink блок, вы можете попробовать сделать это в MATLAB с помощью функционального блока MATLAB. – Dima