我有一个 cv::Mat
,其尺寸为 40 行 X 32 列
。
但是,我需要 reshape 此 cv::Mat
使其具有 100 行 X 32 列
,并允许空元素为 0
.
我试过使用代码:
cv::Mat mat1 = <from somewhere else>
mat1.reshape(mat1.cols, 100);
但它失败并出现错误:
OpenCV Error: Bad argument (The total number of matrix elements is not divisible by the new number of rows) in reshape.
有没有人有 reshape cv::Mat
矩阵的经验?同样,我真的很想能够采用 100 行 X 32 列
矩阵并返回到 40 行 X 32 列
矩阵(并截断多余的行);但我假设如果我解决了一个问题,那么我就会解决另一个问题。
最佳答案
这是使用 Mat::copyTo()
执行此操作的简单方法:
Mat padded = Mat(100, 32, CV_8UC1, Scalar(0));
mat1.copyTo(padded(Rect(0, 0, mat1.cols, mat1.rows)));
另一方面,如果你想从 100x32
Mat
中得到 40x32
,也很容易做到:
Rect roi(0, 0, 32, 40);
Mat mat1 = padded(roi);
请注意,Mat::reshape()
不适合这里,因为新矩阵中没有包含额外的元素,也没有排除任何元素。
关于C++/OpenCV - 如何 reshape cv::Mat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22288301/