我最近开始使用英特尔性能库(IPP)来进行图像处理。对于那些没有听说过IPP的人,可以将IPP视为线性代数处理的MKL的类比。
我已经在OpenCV中实现了一个有些复杂的视觉系统,我想用更快的IPP例程替换掉一些OpenCV例程(例如卷积和FFT)。我的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
,反之亦然的方法? - 我对
cv::Mat
的实现细节非常熟悉,但我不太了解CIppiImage
。cv::Mat
和CIppiImage
的数据布局是否相同?如果是这样,我能否执行类似下面的强制类型转换?CIppiImage cimg = (CIppiImage)(&myMat.data[0])
?