我在安卓设备上同时使用 OpenCV 和 FastCV 来执行一些图像处理操作。在对帧进行阈值处理后,我得到了一张二值图像,在感兴趣区域附近存在适量的黑白噪声。
执行腐蚀,然后对图像进行膨胀,可以为我提供一个几乎无噪声的图像,可用于进一步处理,但是上述两个库都有其缺点。
开放式CV
Mat element = getStructuringElement(MORPH_RECT, Size(2 * erosionSize + 1, 2 * erosionSize + 1), Point(erosionSize, erosionSize));
erode(in, in, element);
element.release();
原谅我的神奇数字,但我对 OpenCV 侵蚀/扩张的简单调用看起来像上面那样。然后我可以修改它的erosionSize/dilationSize 参数,以调整该函数在消除噪音方面的积极程度。问题?性能是这里的重中之重,这个函数的运行速度比我想要的要慢。
快速简历
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 中遗漏的任何方法都将快速执行并使用可调大小参数或
- 包含符合这两个要求并具有相当宽松许可证的功能的任何其他库。