Inter IPP 处理图像数据的方法

Inter IPP没有读取图片和保存图片的函数,需要结合opencv完成这个功能。

opencv读到图片以后逐个像素点赋值给IPP显然是不可取的,方法如下:

int main(int argc, char *argv[]) {
    cv::Mat dst = cv::imread("1.png", CV_LOAD_IMAGE_GRAYSCALE);
    //设置roi
    IppiSize roi_size = IppiSize();
    roi_size.height = dst.rows;
    roi_size.width = dst.cols;

    //数据 pSrcImage IPP存图像数据
    Ipp8u *pSrcImage = NULL;
    //设置矩阵跨度=0
    int Src_StepBytes = 0;
    pSrcImage = ippiMalloc_8u_C1(dst.cols, dst.rows, &Src_StepBytes);
    ippiCopy_8u_C1R((Ipp8u*)dst.data, dst.step[0], pSrcImage, Src_StepBytes, roi_size);

    
    //pImage将IPP格式转opencv格式
    IplImage *pImage = cvCreateImageHeader(cvSize(dst.cols, dst.rows), IPL_DEPTH_8U, 1);
    cvSetData(pImage, (uchar*)pSrcImage, Src_StepBytes);

    cvNamedWindow("Example", 1);
    cvShowImage("Example", pImage);
    cvWaitKey(0);
    cvReleaseImageHeader(&pImage);
    cvDestroyWindow("Example");
    ippFree(pSrcImage); 
    return 0;
}
原文地址:https://www.cnblogs.com/dzzy/p/11772734.html