gpt4 book ai didi

c++ - 如何将 OpenCV Mat 转换为 Halide Image 并返回?

转载 作者:行者123 更新时间:2023-11-28 01:59:52 25 4
gpt4 key购买 nike

我的目标是使用 OpenCV 功能(例如 NL 意味着去噪)增强我现有的图像处理管道(用 Halide 编写)。 OpenCV 函数将无法使用 Halide 的调度功能,因此我的计划是在每个 OpenCV 阶段之前实现每个 Halide Func。剩下的问题是如何最好地从 Halide Image(Func 实现的结果)转换为 OpenCV Mat(作为 OpenCV 函数的输入)以及完成后如何从 OpenCV Mat 转换为 Halide Image。我的 Halide Images 是 float 类型的,有 3 个 channel 。

一个明显的解决方案是编写将数据从一种数据类型复制到另一种数据类型的函数,但这让我觉得很浪费。复制数据不仅会花费宝贵的时间,而且还会浪费内存,因为图像将被存储为两种不同的数据类型。有没有办法使用指针或数据缓冲区以新格式简单地重新包装图像数据?希望这个过程是可逆的,这样我就可以从 Halide 转到 OpenCV,然后在 OpenCV 函数完成后返回到 Halide。

最佳答案

buffer_t 现在不见了,所以我应该更新这个答案。制作包装 OpenCV 垫(使用交错存储布局)的缓冲区的当前方法是:

Halide::Runtime::Buffer<float>::make_interleaved(image.data, image.cols, image.rows, image.channels());

如果 OpenCV 矩阵在行之间有填充,则较长的形式是:

halide_dimension_t shape[3] = {{0, image.cols, image.step1(1)}, 
{0, image.rows, image.step1(0)},
{0, image.channels(), 1}};
Halide::Runtime::Buffer<float> buffer(image.data, 3, shape);

halide_dimension_t 是最小坐标、范围,然后是该维度中的步幅/步长。

关于c++ - 如何将 OpenCV Mat 转换为 Halide Image 并返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39970361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com