【发布时间】:2012-11-08 02:09:29
【问题描述】:
我最近开始使用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 之间的交替更加无缝。以下是一些可以解决问题的方法:
- 是否有一种可以将
cv::Mat转换为CIppiImage或反之亦然的单行代码? - 我对@987654329@ 的实现细节非常熟悉,但我对
CIppiImage了解不多。cv::Mat和CIppiImage是否具有相同的数据布局?如果是这样,我可以做类似于以下演员的事情吗?CIppiImage cimg = (CIppiImage)(&myMat.data[0])?
【问题讨论】:
标签: c image-processing opencv computer-vision intel-ipp