Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Mat opencv组合矩阵_C++_Opencv_Mat - Fatal编程技术网

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));   
    
  • 将输出矩阵中的感兴趣区域(ROI)设置为所需的子矩阵。比如说

    // 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.