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. i18n国际化

    <%  request.setAttribute("date", new Date());  request.setAttribute("salary", ...

  2. Swift不同storyboard之间的交互

    如何实现多个Storyboard之间的切换 正如大家所知道的,Main-board是·程序运行的入口,如果找不到就会抛出异常,打开plist文件可以看到关于Main-board的描述,特别的制定了其b ...

  3. 一个事务复制的bug--更新丢失 续

    阅读本文之前请参考http://www.cnblogs.com/stswordman/p/3258897.html 最近又做了一个case,环境是sql server 2008 R2. 客户添加了一个 ...

  4. SqlServer2012 数据库的同步之发布+订阅

    文章参考了百度过的文章,因为版本不同,操作中也遇到了很多问题,现在整理一下,希望对各位朋友有所帮助. 发布订阅份为两个步骤:1.发布.2订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在 ...

  5. Doc转文本

    微软方案VC 原文:http://www.cnblogs.com/eaglet/archive/2013/01/10/2854224.html 从 http://ifilter.codeplex.co ...

  6. Actor的原理

    先从著名的c10k问题谈起.有一个叫Dan Kegel的人在网上(http://www.kegel.com/c10k.html)提出:现在的硬件应该能够让一台机器支持10000个并发的client.然 ...

  7. java 多线程(ThreadPoolExecutor (补充))

    import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; impo ...

  8. 前端自动化测试工具doh学习总结(二)

    一.robot简介 robot是dojo框架中用来进行前端自动化测试的工具,doh主要目的在于单元测试,而robot可以用来模仿用户操作来测试UI.总所周知,Selenium也是一款比较流行的前端自动 ...

  9. Java实现敏感词过滤

    敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...

  10. java内功 ---- jvm虚拟机原理总结,侧重于GC

    写作日期 2016-08-22-23 交流qq:992591601 参考资料:<深入理解java虚拟机>.<thinking in java>.<Effective Ja ...