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

Ras*_*oul 5 c++ opencv

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

Sam*_*Sam 7

一种简单而干净的方法是使用该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
}
Run Code Online (Sandbox Code Playgroud)

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

  • create() 不会破坏原始图像吗?我以为你必须使用调整大小 (4认同)

kar*_*lip 6

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

Mat dst使用所需的维度和数据类型创建一个新的,然后:

cv::resize(src, dst, dst.size(), 0, 0, cv::INTER_CUBIC);
Run Code Online (Sandbox Code Playgroud)

还有其他插值方法cv::INTER_CUBIC,检查文档.