懂OPENCV的高手和大虾请进。

此帐号已弃用12 2010-01-25 04:22:30
创建一个IplImage对象常规方法是cvCreateImage,
但我现在有一段自己的图像内存区(假设为char* pBuf,24位,100 * 100,长度是100*100*3字节),想在这个已存在的图像内存区上直接创建IplImage
这样可以省了内存区的申请和拷贝过程,请问如何实现?
...全文
117 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
guojianxun17953 2010-03-18
  • 打赏
  • 举报
回复
先创建图像头CreateImageHeader,这样不会开辟内存,然后img->imageData=DataBuff;
xiuxianshen 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 icedmilk 的回复:]
cvCreateImageHeader
只创建图像头
让后将图像头的数据指向你原来图像的数据区。
[/Quote]
然后,把一些图像的主要成员变量赋值一下,width,height,widthstep,还有origin等,自己看下IplImage的头结构
laughinheart 2010-03-17
  • 打赏
  • 举报
回复
其实只要只创建图像头
然后将图像头的数据指向你原来图像的数据区 就可以了

在读取数据的时候,根据图像的情况 按宽度所占的字节数去控制读取 就不会出错了
kier2 2010-03-17
  • 打赏
  • 举报
回复
IplImage *image = NULL;
image = cvCreateImageHeader(cvSize(100,100),8,3);
image->imageData=pBuf;
gaowu 2010-01-26
  • 打赏
  • 举报
回复
楼上说的是图像的四字节对齐问题,不过是100*100的图像就没加考虑了
dirdirdir3 2010-01-26
  • 打赏
  • 举报
回复
否则处理某些数据的时候就会出错........如3位深度101×101的时候........
dirdirdir3 2010-01-26
  • 打赏
  • 举报
回复
绝对需要拷贝,因为iplImage的数据中有的是需要对齐的,也就是每一行后面数据有可能需要填0,不一定就是原来的连续数据组...........最好的方法就是每行拷贝............
fly113 2010-01-25
  • 打赏
  • 举报
回复
楼主看看opencv里跟ROI有关的文档,应该是把图像的某一部分取为ROI,就可以实现了,很方便,也不用另外去开内存。具体是哪个函数我忘了,查查文档吧。
cpu1219 2010-01-25
  • 打赏
  • 举报
回复
2楼的做法很正确
song1177 2010-01-25
  • 打赏
  • 举报
回复
创建IpliMage 指针,直接指向你的空间不久的了
gaowu 2010-01-25
  • 打赏
  • 举报
回复
IplImage *image = NULL;
image = cvCreateImage(cvSize(100,100)8,3);
memcpy(image->imageData, imagedata, 100*100*3);
Icedmilk 2010-01-25
  • 打赏
  • 举报
回复
cvCreateImageHeader
只创建图像头
让后将图像头的数据指向你原来图像的数据区。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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