将 Mat 图像转置为更大的 Mat 图像,Opencv

Posted

技术标签:

【中文标题】将 Mat 图像转置为更大的 Mat 图像,Opencv【英文标题】:Transposing a Mat image into a larger Mat image, Opencv 【发布时间】:2014-03-31 04:54:25 【问题描述】:

我编写了一个函数来获取一个 Mat 图像并将其转置到一个大小为三倍的空白图像的中心。我已经编写了这样做的函数,但我觉得在效率方面可以提高。

void transposeFrame( cv::Mat &frame)

   Mat new_frame( frame.rows * 3, frame.cols * 3, CV_8UC3, Scalar(0,0,255));

   Rect dim = Rect( frame.rows, frame.cols, frame.rows * 2, frame.cols * 2);

   Mat subview = new_frame(dim);

   frame.copyTo(subview);
   frame = subview;

有没有更好的方法来执行这个操作?

【问题讨论】:

为什么每个维度的Rect大小都是2x? 【参考方案1】:

我会使用类似的东西:-

Mat frame_tpsed;
cv::Mat::transpose(frame, frame_tpsed);
new_frame(Rect(frame.rows, frame.cols, frame.rows*2, frame.cols*2))  = frame_tpsed

在 opencvDocs 上转置:http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#void transpose(InputArray src, OutputArray dst)

没试过。忘记说了。

【讨论】:

【参考方案2】:

您可以使用copyMakeBorder 函数。但是,我认为它的运行速度不会快得多。

【讨论】:

以上是关于将 Mat 图像转置为更大的 Mat 图像,Opencv的主要内容,如果未能解决你的问题,请参考以下文章

opencv编程中错误提示:不存在从mat到cvmat适当的转换函数。

ImageResizer - 将图像保存为更大尺寸

如何在 MySQL 中将行数据转置为列

《OpenCV:访问Mat图像中每个像素值》

matlab怎么将100个图像存在1个mat文件里

如何将单个图像从图像矢量复制到临时 cv::Mat?