问题的由来:最近学习用英特尔的ipp做图像算法,读取图像的时候可以把opencv的图像转化成Ipp8u的指针,但是我想确认自己是否转换成功了,由于ipp库没有能显示的函数,所以想自己写一个转换成能够显示的格式。问了一堆人,都是答得文不对题,算了还是自己慢慢琢磨吧!下班回来自己在电脑上配置成功后开始摸索。
猜到ippi8u应该和uchar差不多,参照byte* 转换到iplimage*方法由于都是指针干脆转换成iplimage了,刚好查到一种方法先构造指针头,给其填充数据就可以转换成功了。做好方便以后自己使用贴下实验的代码如下:
cv::Mat dst = cv::imread(“d:/original.jpg”,CV_LOAD_IMAGE_GRAYSCALE);
//设置roi
IppiSize roi_size = IppiSize();
roi_size.height = dst.rows;
roi_size.width = dst.cols;
//输出数据
Ipp8u *pSrcImage = NULL;
//输出矩阵跨度
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);
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);、
后面释放的时候要注意前面用的是imageheader ,所以后面释放的时候也要用相应的releaseimageheader释放,用释放图像的函数会出错。