最近、画像処理に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
aを にCIppiImage
、またはその逆に変換するワンライナーはありますか?- 実装の詳細にはかなり精通してい
cv::Mat
ますが、 についてはあまり知りませんCIppiImage
。同じデータレイアウトcv::Mat
を持っていますか?CIppiImage
もしそうなら、私は次のキャストに似た何かをすることができますか?CIppiImage cimg = (CIppiImage)(&myMat.data[0])
?