C++/OpenCV - 如何 reshape cv::Mat?

标签 c++ opencv

我有一个 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/

相关文章:

c# - 如何创建在任务管理器或服务列表中不可见的进程

c++ - 从 .txt 文件中读取一行并插入到变量中

c++ - 使用 dcmtk 覆盖 dicom 文件中的图像/像素数据

opencv - 如何使用非自由模块安装 OpenCV 3.1?

c++ - 对 boost 库的依赖没有完整路径

c++ - 测试 std::common_type 是否存在

c++ - 为什么 std::vector 这么快(或者我的实现太慢了)

python - 不能在不改变颜色的情况下覆盖面膜?

opencv - OpenCV和过滤器问题

java - 如何将 C++ 变量传递给处理脚本?