如何动态更改cv::Mat图像尺寸

How to change cv::Mat image dimensions dynamically?

本文关键字:cv Mat 图像 何动态 动态      更新时间:2023-10-16

我想声明一个cv::Mat对象,并在我的代码的其他地方,改变它的尺寸(窄和ncols)。我在OpenCV的文档中找不到任何方法。他们总是建议在构造函数中包含维度。

一个简单而干净的方法是使用create()方法。您可以多次调用它,当它的参数与现有缓冲区不匹配时,它将重新分配图像缓冲区:

Mat frame;
for(int i=0;i<n;i++)
{
    ...
    // if width[i], height[i] or type[i] are != to those on the i-1
    // or the frame is empty(first loop)
    // it allocates new memory
    frame.create(height[i], width[i], type[i]); 
    ... 
    // do some processing
}

文档可在https://docs.opencv.org/3.4/d3/d63/classcv_1_1Mat.html#a55ced2c8d844d683ea9a725c60037ad0获得

如果您想调整图像大小,请检查resize() !

用你想要的维度和数据类型创建一个新的Mat dst,然后:

cv::resize(src, dst, dst.size(), 0, 0, cv::INTER_CUBIC);

cv::INTER_CUBIC外,还有其他插补方法,请参考文档

您只是想用这样计算的Size变量来定义它吗?

// dynamically compute size...
Size dynSize(0, 0);
dynSize.width = magicWidth();
dynSize.height = magicHeight();
int dynType = CV_8UC1;
// determine the type you want...
Mat dynMat(dynSize, dynType);

如果您知道最大尺寸,并且只需要使用总Mat中的行/颜色的子范围,则使用函数cv::Mat::rowRange和/或cv::Mat::colRange

http://docs.opencv.org/modules/core/doc/basic_structures.html mat-rowrange