Halcon、opencv与C的图像数据转换【halcon学习网】.doc

Halcon、opencv与C的图像数据转换【halcon学习网】.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Halcon 、opencv 与 C++ 的图像数据转换【 halcon 学习网】 halcon、 opencv 和 C++ 图像内存数据处理机制有差异, 在进行相互转换的时候需要注意内存数据排列问题,否则可 能出现花图或者多出黑边等现象。 Halcon 自身处理不需要考虑字节对齐,但 opencv 和 C++ 需 要考虑,相互转换的时候均需要考虑字节对齐问题。 Halcon  的图像内存机制是紧密排列,而  opencv  和  C++ 图像 内存数据是四字节对齐排列。只有当图像宽度为  4 的整数倍 时, halcon、 opencv 和 C++ 的图像内存是一致的,可相互直 接转换,否则必须调整内存排列后转换。 下列是不确定是 否图像宽度是四的整数倍的时候,三种图像数据的相互转换 代码例程。 1)假设图像大小为 nWid*nHei ;图像数据 PBYTE m_ptr; m_ptr = new BYTE[WIDTHBYTES(nWid*8)*nHei]; opencv:cvImg IPlImage *cvImg; cvImg = cvCreateImage(CvSize(nWid,nHei), IPL_DEPTH_8U, 1); for(int j=0; j<nWid; j++) for(int i=0; i<nHei; i++) { cvImg->imageData[ntmp] m_ptr[ntmp]; } (其中: nModeWid = WIDTHBYTES(nWid*8); ntmp = i*nModeWid+j) Halcon: hImg PBYTE pbDstImg; Hobject hImg; pbDstImg = new BYTE[nWid*nHei]; for(int j=0; j<nWid; j++) for(int i=0; i<nHei; i++) { pbDstImg [ntmp1] = m_ptr[ntmp]; } Hlong hWid,hHei; hWid = nWid; hHei = nHei; gen_image1_extern(&hImg, “byte ”, hWid, hHei, (Hlong)pbDstImg, NULL); (其中: ntmp = i*nModeWid+j , ntmp1 = i*nWid+j) 2)假设 Halcon 图像大小为 modelWid*modelHei ,图像 hImg; unsigned char *ptr; get_image_pointer1(hImg, (Hlong*)&ptr, type, &modelWid, &modelHei); C++ : m_pImgMode; PBYTE m_pImgMode; m_pImgMode = new BYTE[WIDTHBYTES(modelWid *8)* modelHei] for(int i=0; i<modelHei; i++) memcpy(pImgMode+i*WIDTHBYTES(modelWid *8), ptr+i*modelWid, modelWid); OpenCV: cvImage; IPlImage *cvImage = (CvSize(modelWid, modelHei), IPL_DEPTH_8U, 1); for(int i=0; i<modelHei; i++) memcpy(cvImage->imageData+i*WIDTHBYTES(modelWi d*8),ptr+i*modelWid, modelWid);

文档评论(0)

183****9328 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档