如何动态更改cv::Mat图像尺寸
How to change cv::Mat image dimensions dynamically?
我想声明一个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
相关文章:
- 将CHW格式的浮点向量转换为cv::Mat
- C++:从GPU内存(cudaMemcpy2D)获取BGR图像(cv::Mat)
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 将 cv::mat 转换为 QImage
- 将 cv::Mat 转换为 std::vector 的通用函数
- 在 QML VideoOutput 中将 cv::mat 显示为 QVideoFrame
- 如何将 cv::Mat 转换为 vtkImageData?
- 如何将 vtkImageData 转换为 cv::Mat?
- 如何总结所有cv::Mat元素
- Qt-工作线程崩溃时将cv::Mat转换为QImage
- 在 cv::Mat 中生成 2D 坐标网格
- 将 cv::Mat 转换为无符号的 int 像素
- OpenCV 分段错误(核心转储)在使用 cv::Mat::at 时
- 如何将多个 cv::Mat 从 c++ dll 传递到 opencvsharp Mat c#?
- 如何在不复制数据的情况下将 cv::Mat 转换为 2d 标准::矢量
- 如何使用 (*mpORBextractorLeft)(im,cv::Mat(),mvKeys,mDescriptors)
- 从数组创建 Mat 时,'cv::Mat' 和 'int' 类型不兼容
- 如何将 cv::mat 对象从 python 模块传递到 c++ 函数并返回返回的 cv::mat 类型为对象?
- 移动语义和 cv::Mat
- OpenCV 错误:断言在 cv::Mat 行 522 中失败