IplImage* ImageProcess::HImageToIplImage(Hobject &Hobj)
{ IplImage* pImage;
HTuple htChannels;
char cType[MAX_STRING];
Hlong width,height;
width=height=0;
//转换图像格式
convert_image_type(Hobj,&Hobj,"byte");
count_channels(Hobj,&htChannels);
if(htChannels[0].I()==1)
{
unsigned char* ptr;
get_image_pointer1(Hobj,(Hlong*)&ptr,cType,&width,&height);
pImage=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
for(int i=0;i<height;i++)
{
memcpy(pImage->imageData+pImage->widthStep*i,ptr+width*i,width);
}
}
if(htChannels[0].I()==3)
{
unsigned char *ptrRed , *ptrGreen , *ptrBlue;
ptrRed=ptrGreen=ptrBlue=NULL;
get_image_pointer3(Hobj,(Hlong*)&ptrRed,(Hlong*)&ptrGreen,(Hlong*)&ptrBlue,cType,&width,&height);
IplImage *pImageRed , *pImageGreen , *pImageBlue ;
pImage=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,3);
pImageRed=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
pImageGreen=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
pImageBlue=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
for(int i=0;i<height;i++)
{
memcpy(pImageRed->imageData+pImageRed->widthStep*i , ptrRed+width*i , width);
memcpy(pImageGreen->imageData+pImageGreen->widthStep*i , ptrGreen+width*i , width);
memcpy(pImageBlue->imageData+pImageBlue->widthStep*i , ptrBlue+width*i , width);
}
cvMerge(pImageBlue,pImageGreen,pImageRed,NULL,pImage);
cvReleaseImage(&pImageRed);
cvReleaseImage(&pImageGreen);
cvReleaseImage(&pImageBlue);
}
return pImage;
} Hobject ImageProcess::IplImageToHImage(IplImage* pImage)
{
Hobject Hobj;
if(pImage->nChannels==1)
{
int height=pImage->height;
int width=pImage->width;
uchar *dataGray=new uchar[width*height];
for(int i=0; i<height; i++)
{
memcpy(dataGray+width*i, pImage->imageData+pImage->widthStep*i,width);
}
gen_image1(&Hobj,"byte",pImage->width,pImage->height,(Hlong)(dataGray));
delete[ ] dataGray;
}
if(pImage->nChannels==3)
{
IplImage *pImageRed, *pImageGreen, *pImageBlue;
pImageRed=cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U,1);
pImageGreen=cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U,1);
pImageBlue=cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U,1);
cvSplit(pImage, pImageBlue, pImageGreen, pImageRed,NULL);
uchar* dataRed=new uchar[pImage->width*pImage->height];
uchar* dataGreen=new uchar[pImage->width*pImage->height];
uchar* dataBlue=new uchar[pImage->width*pImage->height];
int height=pImage->height;
int width=pImage->width;
for(int i=0; i<height; i++)
{
memcpy(dataRed+width*i, pImageRed->imageData+pImageRed->widthStep*i,width);
memcpy(dataGreen+width*i, pImageGreen->imageData+pImageGreen->widthStep*i,width);
memcpy(dataBlue+width*i, pImageBlue->imageData+pImageBlue->widthStep*i,width);
}
gen_image3(&Hobj,"byte",pImage->width,pImage->height,(Hlong)(dataRed),(Hlong)(dataGreen),(Hlong)(dataBlue));
cvReleaseImage(&pImageRed);
cvReleaseImage(&pImageGreen);
cvReleaseImage(&pImageBlue);
delete[ ] dataRed;
delete[ ] dataGreen;
delete[ ] dataBlue;
}
return Hobj; }

  主要包括这两个函数

IplImage* HImageToIplImage(Halcon::Hobject &Hobj);
Hobject IplImageToHImage(IplImage* pImage);

Halcon与opencv格式的转换的更多相关文章

  1. [转] 将DOS格式文本文件转换成UNIX格式

    点击此处阅读原文 用途说明 dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter).DOS下的文本文 ...

  2. SQL中CONVERT日期不同格式的转换用法

    SQL中CONVERT日期不同格式的转换用法 格式: CONVERT(data_type,expression[,style]) 说明:此样式一般在时间类型(datetime,smalldatetim ...

  3. atitit.标准时间格式 互相转换 秒数 最佳实践

    atitit.标准时间格式 互相转换 秒数 最佳实践 例如00:01:19 转换为秒数  79,,and互相转换 一个思路是使用div 60 mod...不过麻烦的... 更好的方法是使用stamp ...

  4. js字符串的各种格式的转换 ToString,Format

    1.转换钱的格式,仅限int型,float型,double型 double d = 400; d.ToString("C"); //¥400.00 2.10进制数,仅限int型的数 ...

  5. ASP:GB2312格式文本文件转换成UTF-8格式

    '-------------------------------------------------'函数名称:gb2utf_file'作用:利用AdoDb.Stream对象来把GB2312格式文本文 ...

  6. xBIM 格式之间转换

    目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...

  7. Unity 数据Json格式的转换

    把对象转换为字节序列的过程称为对象的序列化. 把字节序列化恢复为对象过程称为对象的反序列化. JSON格式的转换,是一大神给我说的,让我拿来存储数据库时对一些数据的处理,感觉特别好用.但是我并没有深入 ...

  8. JavaBean到JSon格式的转换例子的代码

    内容过程,把做工程过程较好的内容片段备份一次,如下的内容是关于 JavaBean到JSon格式的转换例子的内容,应该对各朋友有一些用处. User u = new User(); u.setId(1) ...

  9. TXT电子书格式怎样转换成epub格式

    怎样将TXT电子书格式转换成epub格式呢?因为很多时候不同的阅读器所支持的电子书格式是有所不同,所以电子书格式转换的问题,在生活中也是会经常出现的问题.如果我们需要将TXT电子书格式转换成epub格 ...

随机推荐

  1. 使用 CXF 做 webservice 简单例子

    Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构.它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量 ...

  2. Cron表达式备忘

    Cron表达式(在Quartz.net里面会用到) 由7段构成:秒 分 时 日 月 星期 年(可选)"-" :表示范围  MON-WED表示星期一到星期三"," ...

  3. wireshark长时间抓包分多个文件

    前言 说一说这个问题的由来,一般使用wireshark不需要长时间抓包的,但是有时候遇到网络通信中非常棘手的问题,例如一个小时出现一次或者几个小时出现一次问题的情况,这种情况下就必须长时间抓包了.但是 ...

  4. 【腾讯优测干货】看腾讯的技术大牛如何将Crash率从2.2%降至0.2%?

    小优有话说: App Crash就像地雷. 你怕它,想当它不存在.无异于让你的用户去探雷,一旦引爆,用户就没了. 你鼓起勇气去扫雷,它却神龙见首不见尾. 你告诫自己一定开发过程中减少crash,少埋点 ...

  5. Java对象表示方式2:XStream实现对对象的XML化

    上一篇文章讲到了使用Java原生的序列化的方式来表示一个对象.总结一下这种对象表示方式的优缺点: 1.纯粹的Java环境下这种方式可以很好地工作,因为它是Java自带的,也不需要第三方的Jar包的支持 ...

  6. HTML5打造的炫酷本地音乐播放器-喵喵Player

    将之前捣腾的音乐频谱效果加上一个播放列表就成了现在的喵喵播放器(Meow meow Player,额知道这名字很二很装萌~),全HTML5打造的网页程序,可本地运行也可以挂服务器上用. 在线Demo及 ...

  7. 细说.NET中的多线程 (五 使用信号量进行同步)

    上一节主要介绍了使用锁进行同步,本节主要介绍使用信号量进行同步 使用EventWaitHandle信号量进行同步 EventWaitHandle主要用于实现信号灯机制.信号灯主要用于通知等待的线程.主 ...

  8. C# socket编程实践——支持广播的简单socket服务器

    在上篇博客简单理解socket写完之后我就希望写出一个websocket的服务器了,但是一路困难重重,还是从基础开始吧,先搞定C# socket编程基本知识,写一个支持广播的简单server/clie ...

  9. 如何在CRM系统中集成ActiveReports最终报表设计器

    有时候,将ActiveReports设计器集成到业务系统中,为用户提供一些自定义的数据表,用户不需要了解如何底层的逻辑关系和后台代码,只需要选择几张关联的数据表,我们会根据用户的选择生成可供用户直接使 ...

  10. Java8的新特性以及与C#的比较

    函数式接口 VS 委托 在C中,可以使用函数指针来存储函数的入口,从而使得函数可以像变量一样赋值.传递和存储,使得函数的调用变得十分灵活,是实现函数回调的基础.然而函数指针不存在函数的签名信息,甚至可 ...