【发布时间】:2017-11-13 11:31:46
【问题描述】:
我有一个有 M 行和 3 列的 opencv 垫子,有没有办法重新排序垫子,以便在中间列保持原位的同时切换第一列和最后一列(即第三列)没有 复制数据?
【问题讨论】:
-
你能详细说明什么是“不复制数据”吗?
-
@I.Newton :当然,我的意思是没有逐个元素的深度复制,而只是“玩”垫子的标题
我有一个有 M 行和 3 列的 opencv 垫子,有没有办法重新排序垫子,以便在中间列保持原位的同时切换第一列和最后一列(即第三列)没有 复制数据?
【问题讨论】:
OpenCV 数据是一个像素数组。有时您可以获得图像的列或矩形视图(例如 col() )。其中数据不是连续的,据我所知,它是在行之间用一个步长计算的。但是数据是共享的,仍然是一个数组。
那么问题就变成了:我可以在不复制数据的情况下交换数组的两个部分吗?据我所知没有。
您可以使用OpenCV的优化功能来交换它们,但数据会被复制。
此外,非连续数据比 OpenCV 函数中的连续数据要慢得多。更多可以read here。
【讨论】:
您可以为此使用 OpenCV 函数 flip。例如,下面的代码会翻转中间列的图像。
int main ()
{
Mat img, flipped; //your mat
img =imread("lena.jpg");
flip(img,flipped ,1); // flipped is the output
imshow("img",flipped);
waitKey(0);
}
【讨论】: