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

时间:2011-12-22 16:16:27

标签: c++ opencv

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

4 个答案:

答案 0 :(得分:6)

如果您要调整图片大小,请检查resize()

使用您想要的尺寸和数据类型创建新的Mat dst,然后:

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

除了cv::INTER_CUBIC之外还有其他插值方法,请查看文档。

答案 1 :(得分:4)

一种简单而干净的方法是使用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]); ///https://docs.opencv.org/3.4/d3/d63/classcv_1_1Mat.html#a55ced2c8d844d683ea9a725c60037ad0
    ... 
    // do some processing
}

答案 2 :(得分:3)

您是否只想使用您计算的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);

答案 3 :(得分:0)

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

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