Ho recentemente iniziato a utilizzare Intel Performance Primitives (IPP) per l'elaborazione delle immagini. Per coloro che non hanno sentito parlare di IPP, pensa a IPP come l'analogo di MKL per l'elaborazione delle immagini anziché l'algebra lineare.Utilizzando le immagini OpenCV Mat con Intel IPP?
Ho già implementato un sistema di visione un po 'complicato in OpenCV, e mi piacerebbe scambiare alcune delle routine di OpenCV (ad esempio convoluzione e FFT) per le routine IPP più veloci. Il mio codice OpenCV utilizza sempre la struttura dei dati delle immagini cv::Mat
. Tuttavia, in base agli esempi di codice IPP, sembra che IPP preferisca la struttura dei dati CIppiImage
.
Il mio sistema esegue diverse trasformazioni di immagine in OpenCV, quindi voglio fare un paio di cose in IPP, quindi fare più lavoro in OpenCV. Ecco un modo ingenuo per fare OpenCV e IPP gioca bene insieme:
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
Tuttavia, questo è una specie di noioso, e la lettura/scrittura di file probabilmente aumenta il tempo complessivo di esecuzione.
Sto cercando di rendere più semplice l'alternanza tra OpenCV e IPP in un programma di elaborazione delle immagini. Qui ci sono un paio di cose che potrebbero risolvere il problema:
- C'è una battuta che avrebbe convertire un
cv::Mat
-CIppiImage
e viceversa? - Sono abbastanza familiare con i dettagli di implementazione
cv::Mat
, ma non so molto diCIppiImage
.cv::Mat
eCIppiImage
hanno lo stesso layout di dati? In tal caso, potrei fare qualcosa di simile al cast seguente?CIppiImage cimg = (CIppiImage)(&myMat.data[0])
?