将一个矩阵复制到另一个矩阵的子集
Copy a matrix to a subset of another matrix
我在c++中使用OpenCV将矩阵的子集复制到另一个更大的矩阵中有困难。
我尝试了以下代码:
#include <opencv2/opencv.hpp>
void printMatrix(const cv::Mat &M, std::string matrix)
{
printf("Matrix "%s" is %i x %in", matrix.c_str(), M.rows, M.cols);
std::cout << M << std::endl;
}
int main(int argc, char ** argv)
{
cv::Mat P0(3, 4, CV_32F);
printMatrix(P0, "P0 Initial");
cv::Mat R0 = cv::Mat::eye(3,3,CV_32F);
printMatrix(R0, "R0 I");
R0.copyTo(P0.colRange(0,2));
printMatrix(P0, "P0 with R");
return 0;
}
生成以下输出:
Matrix "P0 Initial" is 3 x 4
[-4.3160208e+008, -4.3160208e+008, -4.3160208e+008, -4.3160208e+008;
-4.3160208e+008, -4.3160208e+008, -4.3160208e+008, -4.3160208e+008;
-4.3160208e+008, -4.3160208e+008, -4.3160208e+008, -4.3160208e+008]
Matrix "R0 I" is 3 x 3
[1, 0, 0;
0, 1, 0;
0, 0, 1]
Matrix "P0 with R" is 3 x 4
[-4.3160208e+008, -4.3160208e+008, -4.3160208e+008, -4.3160208e+008;
-4.3160208e+008, -4.3160208e+008, -4.3160208e+008, -4.3160208e+008;
-4.3160208e+008, -4.3160208e+008, -4.3160208e+008, -4.3160208e+008]
While表示复制操作没有做任何操作。
我在这里发现了一个类似的帖子,但根据该帖子的建议将相关行更新为以下内容仍然产生相同的输出。
//R0.copyTo(P0.colRange(0,2));
cv::Mat dest = P0.colRange(0,2);
printMatrix(P0, "P0 with R");
你的代码不能为我编译。我在R0.copyTo(P0.colRange(0,2));
得到一个错误(如果我尝试R0.copyTo(P0.colRange(0,3));
有正确的范围。)但这确实适用于我:
cv::Mat dest(P0.colRange(0,3));
R0.copyTo(dest);
printMatrix(P0, "P0 with R");
你几乎有它在你的最后一个代码示例,但你遗漏了copyTo
(和你的范围是不正确的)。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 运行同一解决方案的另一个项目的项目
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++从另一个类访问公共静态向量的正确方法是什么
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 使用std::transform将一个范围的元素添加到另一个范围中
- 检查数值类型是否是另一个数值类型的子集
- 将 std::variant 转换为另一个具有类型子集的 std::variant
- 如何检查字符串是否是另一个字符串的正确子集
- 确定一个向量是否是另一个向量的子集的有效方法
- 给出两个二进制数,将一个子集从一个复制到另一个
- 向量,包含指向同一内存的另一个向量的部分子集
- 我可以将矩阵的子集传递到MKL中的另一个函数中吗
- 优化检查一个比特向量是否是另一个的适当子集
- 将一个矩阵复制到另一个矩阵的子集
- 在 Rcpp 中,为什么我不能将子集向量分配给另一个子集向量
- 如何在c++中检查一个向量是否是另一个向量的子集
- Boost::variant成员子集的另一个Boost::variant
- 如何查找一个列表是否是另一个列表的子集