【发布时间】:2012-08-15 13:25:03
【问题描述】:
我在安卓设备上同时使用 OpenCV 和 FastCV 来执行一些图像处理操作。在对帧进行阈值处理后,我得到了一张二值图像,在感兴趣区域附近存在适量的黑白噪声。
执行腐蚀,然后对图像进行膨胀,可以得到一个几乎无噪声的图像,可用于进一步处理,但是上述两个库都有其缺点。
OpenCV
Mat element = getStructuringElement(MORPH_RECT, Size(2 * erosionSize + 1, 2 * erosionSize + 1), Point(erosionSize, erosionSize));
erode(in, in, element);
element.release();
请原谅我的神奇数字,但我对 OpenCV 侵蚀/扩张的简单调用看起来像上面那样。然后我可以修改它的erosionSize/dilationSize 参数,以调整该函数在消除噪音方面的积极程度。问题?性能在这里是重中之重,这个函数的运行速度比我想要的要慢。
FastCV
fcvFilterErode3x3u8_v2 (const uint8_t *__restrict src, unsigned int srcWidth, unsigned int srcHeight, unsigned int srcStride, uint8_t *__restrict dst, unsigned int dstStride)
上面的 prototpye 是针对 FastCV 的 erode 实现的,这里没有参数来调整腐蚀的大小。鉴于 FastCV 已针对移动架构进行了优化,并且我怀疑它实际上利用了我用于测试的 Galaxy Nexus 中的 GPU,因此此功能比上述功能要快得多。但是,我需要在同一帧上多次循环和运行它以实现相同程度的侵蚀,从而牺牲了过程中的任何性能优势。
有人知道吗:
- 我可能在任一 API 中遗漏的任何方法都将快速执行并使用可调大小参数 或
- 任何其他包含符合这两个要求并具有相当宽松许可的函数的库。
【问题讨论】:
-
FastCV 在 Galaxy Nexus 上不使用 GPU,至少因为它是 TI 芯片。
标签: c++ image-processing opencv android-ndk