51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 282|回复: 1

[未解决] Qt+Halcon图片格式转换问题

[复制链接]

该用户从未签到

1

主题

7

帖子

32

积分

Rank: 1

积分
32
发表于 2020-3-1 14:41:56 | 显示全部楼层 |阅读模式

51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

您需要 登录 才可以下载或查看,没有帐号?会员注册

x
想请教一下,Qt中的QImage和HObject的转换,始终转换不成功

1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

该用户从未签到

0

主题

2

帖子

11

积分

Rank: 1

积分
11
发表于 2020-3-2 09:14:37 | 显示全部楼层
//QImage图像转换为halcon格式图像,
HObject CImageFormatConvertion::QImage2HObject(QImage qImage)
{
        HObject hImage;

        int width, height;
        try
        {
                GenEmptyObj(&hImage);
                width = qImage.width();
                height = qImage.height();

                if (qImage.bits() == NULL || width <= 0 || height <= 0)
                {
               MessageBox(NULL, TEXT("qImage  is null !"), TEXT("MSG"), MB_OK);
                           return   hImage  ;
                }
                qDebug("qImage.format()--:%d", qImage.format());
        //只转化 Format_Indexed8    Format_RGB32    Format_RGB888 格式图像
                if(QImage::Format_Indexed8 == qImage.format())//灰度图像
                {
                        uchar *dataGray = new uchar[width*height];
                        for(int i=0; i<height; i++)
                        {
                                memcpy(dataGray+width*i,qImage.bits()+qImage.bytesPerLine()*i,width);
                        }
                        GenImage1(&hImage,"byte",(Hlong)width,(Hlong)height,(Hlong)dataGray);
                        delete[] dataGray;
                }
                else if(QImage::Format_RGB32 == qImage.format())//RGB32图像
                {                       
                        uchar *dataR = new uchar[width*height];
                        uchar *dataG = new uchar[width*height];
                        uchar *dataB = new uchar[width*height];
                        uchar *data = qImage.bits();
                        for(int i=0; i<height; i++)
                        {
                                int lineNum = i*qImage.bytesPerLine();
                                for(int j=0;j<width; j++)
                                {
                                        dataB[i*width+j] = data[lineNum+j*4];
                                        dataG[i*width+j] = data[lineNum+j*4+1];
                                        dataR[i*width+j] = data[lineNum+j*4+2];
                                }
                        }
                        GenImage3(&hImage,"byte",(Hlong)width,(Hlong)height,(Hlong)dataR,(Hlong)dataG,(Hlong)dataB);
                        delete[] dataR;
                        delete[] dataG;
                        delete[] dataB;
                }
                else if(QImage::Format_RGB888 == qImage.format())//24位图像
                {
                        uchar *dataR = new uchar[width*height];
                        uchar *dataG = new uchar[width*height];
                        uchar *dataB = new uchar[width*height];
                        uchar *data = qImage.bits();
                        for(int i=0; i<height; i++)
                        {
                                int lineNum = i*qImage.bytesPerLine();
                                for(int j=0;j<width; j++)
                                {
                                        dataR[i*width+j] = data[lineNum+j*3];
                                        dataG[i*width+j] = data[lineNum+j*3+1];
                                        dataB[i*width+j] = data[lineNum+j*3+2];
                                }
                        }
                        GenImage3(&hImage,"byte",(Hlong)width,(Hlong)height,(Hlong)dataR,(Hlong)dataG,(Hlong)dataB);
                        delete[] dataR;
                        delete[] dataG;
                        delete[] dataB;
                }
                else
                {
            MessageBox(NULL, TEXT("image format is wrong!"), TEXT("MSG"), MB_OK);
                }

        }catch(HException)
        {
        }
        return hImage;
}

1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

您需要登录后才可以回帖 会员登录 | 会员注册

本版积分规则

51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用反馈 | 51Halcon论坛管理团队论坛管理团队

申请友链| 小黑屋| 手机版| Archiver|  

粤ICP备15095995号-2 粤公网安备44030602000670号

CopyRight © 2015-2020 51Halcon机器视觉. Tencent Cloud X3.4.

快速回复 返回顶部 返回列表