这个玩意儿研究了一天,只因参数较多,错一个都会失败.看源码,查度娘.终于成功搞定了.
下面直接给2个方法,第1种能正常显示,不过数据貌似有些偏差(肉眼看不出来,匹配模板会有误差,估计是直接这样解码有问题)
方法一:
//方法一:可行,但是图像识别准确率和直接cvLoad的准确率有差别,也就是图片有变化
IplImage *pBmp = cvCreateImage(cvSize(head.biWidth,abs(head.biHeight)),IPL_DEPTH_8U, nChannel);
memcpy(pBmp->imageData,bmpData+bmpfilehead+bmpinfohead,head.biWidth*abs(head.biHeight)*nChannel);
if(head.biHeight>0)cvFlip(pBmp,pBmp);//旋转
方法二:用系统封装好的,解码BMP更准确
//方法二:通过系统方法解压内存数据,数据包含头信息
CvMat mat = cvMat(abs(head.biHeight),head.biWidth*nChannel,CV_8UC3,bmpData);
IplImage *pBmp = cvDecodeImage(&mat);
推荐第二个方法
本文链接:https://it72.com/11748.htm