gpt4 book ai didi

c++ - 从行到列的 Mat copyTo 不起作用!为什么?

转载 作者:太空狗 更新时间:2023-10-29 20:25:31 26 4
gpt4 key购买 nike

这个答案说明了如何将矩阵的一行复制到另一行:How to copy a row of a Mat to another Mat's column in OpenCv?但是,如果我尝试将矩阵的一行复制到列 vector ,程序就会突然结束。示例:

Mat A(640,480,CV_64F);
Mat B(480,1,CV_64F);
A.row(0).copyTo(B.col(0));

一个可能的解决方法是:

Mat A(640,480,CV_64F);
Mat B;
A.row(0).copyTo(B);
B = B.t();

但是如果 A 是不同的类型,我如何在 B 中获取类型 CV_64F?数据类型也被复制了吗?而且 - 最重要的是 - 为什么我需要这个解决方法?

最佳答案

copyTo() 函数只能在相同大小(宽度和高度)和相同类型的矩阵之间复制数据。因此,您不能直接使用它来将矩阵行复制到矩阵列。通常 OpenCV 会重新分配目标矩阵,使其大小和类型与原始图像匹配,但调用 col() 函数会返回无法重新分配的常量临时对象。结果你的程序崩溃了。

其实这个问题是可以解决的。您可以将行复制到列(如果它们具有相同数量的元素),并且可以在不同类型的矩阵之间复制数据。 Mat 为其数据提供了一个迭代器,这意味着您可以使用所有适用于迭代器的 C++ 函数。例如 copy() 函数。

Mat A(640, 480, CV_64F);
Mat B(480, 1, CV_32S); // note that the type don't have to be the same
Mat tmp = A.row(0); // no data is copied here. it is needed only because taking iterator to temporary object is really bad idea
copy(tmp.begin<double>(), tmp.end<double>(), B.begin<int>());

关于c++ - 从行到列的 Mat copyTo 不起作用!为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23613787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com