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