Niedawno zacząłem używać Intel Performance Primitives (IPP) do przetwarzania obrazu. Dla tych, którzy nie słyszeli o IPP, pomyśl o IPP jako o analogie MKL dla przetwarzania obrazu zamiast algebry liniowej.Używanie obrazów OpenCV Mat z Intel IPP?
Mam już zaimplementowany nieco skomplikowany system wizyjny w OpenCV i chciałbym zamienić niektóre z procedur OpenCV (np. Splot i FFT) dla szybszych procedur IPP. Mój kod OpenCV zawsze korzysta ze struktury danych obrazu cv::Mat
. Jednak na podstawie próbek kodu IPP wydaje się, że IPP preferuje strukturę danych CIppiImage
.
Mój system wykonuje kilka przekształceń obrazu w OpenCV, następnie chcę zrobić kilka rzeczy w IPP, a następnie wykonać więcej pracy w OpenCV. Oto naiwny sposób, aby OpenCV i IPP grać ładnie razem:
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
Jednak jest to rodzaj nudne i odczytu/zapisu plików prawdopodobnie przyczynia się do całkowitego czasu wykonania.
staram się uczynić go bardziej płynną na przemian OpenCV i IPP w programie do przetwarzania obrazu. Oto kilka rzeczy, które mogą rozwiązać ten problem:
- Czy istnieje jedno-liner, które konwertować
cv::Mat
doCIppiImage
i vice versa? - jestem dość obeznany z
cv::Mat
szczegółów implementacji, ale nie wiem zbyt wiele oCIppiImage
. Czycv::Mat
iCIppiImage
mają taki sam układ danych? Jeśli tak, czy mogę zrobić coś podobnego do poniższej obsady?CIppiImage cimg = (CIppiImage)(&myMat.data[0])
?