更改opencv mat中的列顺序而不复制数据

时间:2017-11-13 11:31:47

标签: c++ opencv

我有一个有M行和3列的opencv垫子,有没有办法重新排序垫子,这样第一个和最后一个(即第三个)列被切换,而中间列保持在原位没有< / strong>复制数据?

2 个答案:

答案 0 :(得分:3)

OpenCV数据是一个像素数组。有时您可以获得图像的列或矩形视图(例如使用col())。其中数据不是连续的,据我所知,它是在行之间的步骤计算的。但是数据是共享的,仍然是一个数组。

然后问题变成:我可以交换数组的两个部分而不复制数据吗?不是我所知道的。

您可以使用OpenCV的优化功能进行交换,但数据将被复制。

此外,非连续数据比OpenCV函数中的连续数据慢。更多可以是read here

答案 1 :(得分:2)

您可以使用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);

}