我最近开始使用Intel Performance Primitives (IPP)进行图像处理。对于那些还没有听说过 IPP 的人,可以将 IPP 看作是用于图像处理的MKL的类似物,而不是线性代数。
我已经在 OpenCV 中实现了一个有点复杂的视觉系统,我想将一些 OpenCV 例程(例如卷积和 FFT)换成更快的 IPP 例程。我的 OpenCV 代码总是使用cv::Mat
图像数据结构。但是,根据 IPP 代码示例,似乎 IPP 更喜欢CIppiImage
数据结构。
我的系统在 OpenCV 中进行了几次图像转换,然后我想在 IPP 中做一些事情,然后在 OpenCV 中做更多的工作。这是使 OpenCV 和 IPP 很好地结合在一起的一种天真的方法:
cv::Mat = load original image
use OpenCV to do some work on cv::Mat
write cv::Mat to file
CIppiImage = read cv::Mat from file //for IPP
use IPP to do some work on CIppiImage
write CIppiImage to file
cv::Mat = read CIppiImage from file
use OpenCV to do more work on cv::Mat
write final image to file
但是,这有点乏味,并且读/写文件可能会增加整体执行时间。
我试图让图像处理程序中的 OpenCV 和 IPP 之间的交替更加无缝。这里有几件事可以解决这个问题:
- 是否有一个可以将 a 转换为
cv::Mat
反之亦然CIppiImage
的单线器? - 我对
cv::Mat
实现细节非常熟悉,但对CIppiImage
. 是否具有相同cv::Mat
的CIppiImage
数据布局?如果是这样,我可以做类似于以下演员的事情吗?CIppiImage cimg = (CIppiImage)(&myMat.data[0])
?