在不复制数据的情况下更改 opencv mat 中的列顺序



我有一个 opencv 垫子,它有 M 行和 3 列,有没有办法对垫子重新排序,以便切换第一列和最后一列(即第三列(,而中间列保持原位而不复制数据?

OpenCV 数据是一个像素数组。有时你可以得到一个图像的列或矩形视图(如col(((。其中数据不是连续的,据我所知,它是通过行之间的步骤计算的。但是,数据是共享的,并且仍然是一个数组。

那么问题就变成了:我可以在不复制数据的情况下交换数组的两个部分吗?据我所知,没有。

您可以使用OpenCV的优化函数来交换它们,但数据将被复制。

此外,非连续数据比OpenCV函数中的连续数据慢得多。更多内容可以在这里阅读。

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

最新更新