IPP如何改进OpenCV应用程序?我该如何整合它?

mepcadol  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(125)

我在想:

  1. Intel IPP如何使OpenCV应用程序更快?
    1.如何将其集成到已经编写的OpenCV应用程序中?
    我没有立即找到答案(this文档并没有说太多),但最后我发现这个问题的答案有一个明确的例子,回答问题1。并且部分地为2。
    不过,我有一个观察:
  2. (const Ipp8u*)&img.data[0]的铸造会被认为是低效的吗?
    1.我想改进SURF描述符,开发并行计算和矢量化。IPP可以帮助我吗?
    1.如何在目标计算机上存在或不存在IPP的两种情况下开发OpenCV?
ogq8wdun

ogq8wdun1#

我可以在一个控制台应用程序中分享OpenCV和IPP函数的使用示例。正如您所看到的,OpenCV Mat可以用于IPP函数,通常比IPP函数更快。

#include <Windows.h>
#include <Vfw.h>
#include <string>
#include <iostream>

#include "opencv2\core\core.hpp"
#include "opencv2\imgproc\imgproc.hpp"
#include "opencv2\imgcodecs\imgcodecs.hpp"
#include "opencv2\highgui\highgui.hpp"

#include <ipp.h>
#include <ipps.h>
#include <ippi.h>

int _tmain(int argc, _TCHAR* argv[])
{
    using namespace std;
    using namespace cv;

    Mat img=imread("d:\\MyFolder\\sample_02.jpg");
    Mat grayImg=img.clone();
    cvtColor(img,grayImg,CV_BGR2GRAY);
    Mat outImg = grayImg.clone();
    int step = img.cols;
    const Ipp32s kernel[9] = {-1, 0, 1, -1, 0, 1, -1, 0, 1};
    IppiSize kernelSize = {3,3};
    IppiSize dstRoiSize = {img.cols - kernelSize.width + 1, img.rows - kernelSize.height + 1};
    IppiPoint anchor = {2,2};
    int divisor = 1;

    IppStatus status = ippiFilter_8u_C1R((const Ipp8u*)&grayImg.data[0], step,(Ipp8u*)&outImg.data[0], step, dstRoiSize,kernel, kernelSize, anchor,divisor);
    namedWindow("Source image",CV_WINDOW_FREERATIO);
    imshow("Source image", img);
    namedWindow("Output image",CV_WINDOW_FREERATIO);
    imshow("Output image", outImg);
    waitKey();
}

相关问题