我创建了一个在Simulink S函数(这是C++代码)中实现的视觉算法。除了颜色和深度图像的对齐之外,我完成了所有想要的任务。合并rgb和深度图像从一个kinect
我的问题是我怎样才能使2图像相互对应。换句话说,我如何使用opencv制作3D图像。
我知道我的问题可能有点模糊,所以我会包括我的代码,这将解释的问题
#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的页面(可以不包括因为堆栈交换拉特的链接)
,但我不能对于我来说,我想知道如何实现向每个彩色像素添加正确深度值的目标。
我试过使用reprojectImageTo3D()但我找不出Q矩阵。 我也尝试从该页面分配其他功能,但我似乎无法让我的输入正确。
如果你正在写自己的Simulink模块,你可以尝试使用MATLAB功能块做在MATLAB。 – Dima