C++ 使用Mat opencv组合矩阵
我有如下两个矩阵C++ 使用Mat opencv组合矩阵,c++,opencv,mat,C++,Opencv,Mat,我有如下两个矩阵 R = [1,0,0,0 0,1,0,0 0,0,1,0 0,0,0,1] 及 我可以用上述2个矩阵以这种格式制作4X4矩阵吗 [ R | T 0 0 0 1] 这基本上是从旋转和平移中获得变换矩阵。我正在尝试使用for循环并将它们组合成一个矩阵。但是,有没有一种简单的方法或功能可以帮助我以更短的方式完成这项工作?这里有一种方法。您可以先创建输出矩阵,然后对输出的矩形子区域(ROI—“
R = [1,0,0,0
0,1,0,0
0,0,1,0
0,0,0,1]
及
我可以用上述2个矩阵以这种格式制作4X4矩阵吗
[ R | T
0 0 0 1]
这基本上是从旋转和平移中获得变换矩阵。我正在尝试使用for循环并将它们组合成一个矩阵。但是,有没有一种简单的方法或功能可以帮助我以更短的方式完成这项工作?这里有一种方法。您可以先创建输出矩阵,然后对输出的矩形子区域(ROI—“感兴趣区域”)进行操作:
// create output matrix
// rows and cols specify the disired size for the output matrix
// CV_32F is data type for matrix elements
Mat out(rows, cols, CV_32F, Scalar(0));
// your input matrices
Mat R, T;
// set ROI for R
cv::Rect rect_R(0, 0, R.rows, R.cols);
cv::Mat out_R = out(rect_R);
// this assignment does not copy data
// out and out_R now share data
// assign out_R to R
out_R = R;
// similarly you can set another area of out to matrix T, etc.
out
已设置。你完了在您的示例中,R是4x4,T是1x3矩阵。您如何做
R | T
(尺寸不一致)?你能为你的例子展示你想要的结果吗?谢谢你的回答,但是由于某些原因,复制没有发生。我用许多方法面对同样的问题。Z的值似乎都是0,而不是我期望的格式。你能帮帮我吗?Z是什么?你说复制不发生是什么意思?究竟哪里有问题?您是先创建R和T矩阵的吗?R和T矩阵的类型是什么(32位浮点-CV_32F、无符号字符-CV_8U或有符号32位整数CV_32S等)?应使用相同类型创建输出矩阵。每个矩阵的类型为64_CS1。对不起,错误在别处。这种方法很有效。谢谢:)。
// your input matrices
Mat R, T;
// set ROI for R
cv::Rect rect_R(0, 0, R.rows, R.cols);
cv::Mat out_R = out(rect_R);
// this assignment does not copy data
// out and out_R now share data
// assign out_R to R
out_R = R;
// similarly you can set another area of out to matrix T, etc.