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

C++ IPP如何改进OpenCV应用程序?我如何整合它?,c++,opencv,parallel-processing,computer-vision,intel-ipp,C++,Opencv,Parallel Processing,Computer Vision,Intel Ipp,我想知道: 如何使OpenCV应用程序更快 如何将其集成到已编写的OpenCV应用程序中 我并没有立即找到答案(文档并没有说太多),但最终我找到了这个问题,哪个答案有一个明确的例子,哪个答案回答了问题1。部分为2 然而,我有一个观察: (常量Ipp8u*)和img.data[0]转换是否被认为效率低下 我想通过并行计算和矢量化来改进SURF描述符。IPP能帮我吗 在目标机器上是否存在IPP的情况下,如何开发OpenCV 我可以在一个控制台应用程序中与您分享OpenCV和IPP函数的使用示例。正如

我想知道:

  • 如何使OpenCV应用程序更快
  • 如何将其集成到已编写的OpenCV应用程序中
  • 我并没有立即找到答案(文档并没有说太多),但最终我找到了这个问题,哪个答案有一个明确的例子,哪个答案回答了问题1。部分为2

    然而,我有一个观察:

  • (常量Ipp8u*)和img.data[0]
    转换是否被认为效率低下
  • 我想通过并行计算和矢量化来改进SURF描述符。IPP能帮我吗
  • 在目标机器上是否存在IPP的情况下,如何开发OpenCV

  • 我可以在一个控制台应用程序中与您分享OpenCV和IPP函数的使用示例。正如您所见,Open CV 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>
    
    
    
    using namespace std;
    using namespace cv;
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        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();
        return 0;
    }
    
    #包括
    #包括
    #包括
    #包括
    #包括“opencv2\core\core.hpp”
    #包括“opencv2\imgproc\imgproc.hpp”
    #包括“opencv2\imgcodecs\imgcodecs.hpp”
    #包括“opencv2\highgui\highgui.hpp”
    #包括
    #包括
    #包括
    使用名称空间std;
    使用名称空间cv;
    int _tmain(int argc,_TCHAR*argv[]
    {
    Mat img=imread(“d:\\MyFolder\\sample_02.jpg”);
    Mat grayImg=img.clone();
    CVT颜色(img、灰色img、CV_bgr2灰色);
    Mat outImg=grayImg.clone();
    int step=img.cols;
    常量Ipp32s内核[9]={-1,0,1,-1,0,1,-1,0,1};
    iPisize kernelSize={3,3};
    ippsize-dstRoiSize={img.cols-kernelSize.width+1,img.rows-kernelSize.height+1};
    IppiPoint锚点={2,2};
    整数除数=1;
    IppStatus status=ippiFilter_8u_C1R((常量Ipp8u*)和灰度数据[0],步长,(Ipp8u*)和灰度数据[0],步长,dstRoiSize,内核,内核大小,锚定,除数);
    namedWindow(“源图像”,CV\u窗口\u自由比率);
    imshow(“源图像”,img);
    namedWindow(“输出图像”,CV\u窗口\u自由比率);
    imshow(“输出图像”,outImg);
    waitKey();
    返回0;
    }
    
    例如,检查。。。实际上,要检查IPP是否启用或禁用,需要大量的
    #ifdef
    not@Miki好的,这很有道理,谢谢你。你们能看一下这个问题吗?我不知道如何修改OpenCV CMake,使其与Intel并行工作室工具配合使用。我已经看到了。。。不知道;)