得到一个JPEG图像格式指针,如何转成opencv的 Iplimage 呢?

tyt2222008 2011-03-22 07:03:43
本人正在海康威视的板卡上做二次开发,用了板卡的API,就是这个函数,得到一幅JPEG图像格式指针:;

int __stdcall GetJpegImage(HANDLE hChannelHandle,UCHAR *ImageBuf, ULONG *Size, UINT nQuality)

参 数: HANDLE hChannelHandle;通道句柄
UCHAR *ImageBuf;JPEG图像指针
ULONG *Size;JPEG图像尺寸,函数调用前是ImageBuf的大小,调用后是实际
图像所占用的字节数
UINT nQuality;JPEG图像质量,取值范围1-100,取值100时质量最好

然而,怎样才能把这个 JPEG图像格式指针 UCHAR *ImageBuf 转成 opencv可以处理的 IplImage 呢?

本人试过以下的方法:

GetJpegImage(channelHandle, imageBuf, &Size, 100);

IplImage *pIplImage=cvCreateImage(cvSize(704,576),8,1);
if(pIplImage)
{
memcpy(pIplImage->imageData,imageBuf,Size);
cvShowImage("image",pIplImage);
cvReleaseImage(&pIplImage);
}



但是得不到正确的结果啊,显示的图像是雪花,应该是格式错误。

由于小弟初学 图像处理,不懂得 ‘JPEG图像格式指针’到底是怎样存储格式,以及怎样可以成功转化成 IplImage。

所以请各位大侠多多指教。不胜感激!
...全文
702 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tyt2222008 2011-03-26
  • 打赏
  • 举报
回复
我的问题已经解决了,opencv里有专门的函数可以解jpeg的,因为opencv 本来就依赖于libjpeg,在它上面解压缩jpeg文件。

主要代码如下:
GetJpegImage(channelHandle, imageBuf, &Size, 50);

CvMat mat = cvMat(704,576,CV_8UC1, imageBuf);

IplImage *pIplImage = cvDecodeImage( &mat, 1 );


cvDecodeImage 就是opencv里专门解压缩图像的函数,我是从它的源代码里看到的。

还是谢谢各位的回复
sunnywish 2011-03-25
  • 打赏
  • 举报
回复
楼上说的很对
ChenLee_1 2011-03-23
  • 打赏
  • 举报
回复
很明显,这样做是不对的。你需要先在内存中进行解压。然后,得到位图,之后,在给iplimage赋值。这样你就可以用了。不过,opencv并没有提供内存解压的专门函数。在opencv底层用了libjpeg开源解码库。用这个解码库你应该可以解决问题。

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧