51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 647|回复: 22

[待解决] 3D点云显示问题

[复制链接]
  • TA的每日心情
    害羞
    2018-5-31 10:31
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    4

    主题

    14

    帖子

    490

    积分

    Rank: 6Rank: 6

    积分
    490

    切换助手验证会员

    发表于 2020-4-15 19:56:06 | 显示全部楼层 |阅读模式

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

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

    x
    Halcon有关于根据点云深度信息来个点云着色的示例吗?就是每个点云的颜色代表不同的深度。类似于LMI。不同高度颜色不同。
    图片1.png

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

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

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

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

  • TA的每日心情
    开心
    昨天 10:31
  • 签到天数: 642 天

    连续签到: 3 天

    [LV.9]以坛为家II

    142

    主题

    728

    帖子

    4229

    积分

    Rank: 9

    积分
    4229

    热心会员突出贡献切换助手验证会员最佳新人

    发表于 2020-4-15 21:17:54 | 显示全部楼层
    先导入附件包的LmiColorMap.dll,声明命名空间:
    1. using LmiColorMap;
    复制代码

    然后得到深度图形的buff缓存数组(pData就是图像指针,nWidth和nHeight分别是图像的宽度和高度)
    1. short[] buff = new short[nWidth * nHeight];
    2. Marshal.Copy(ptData, buff, 0, buff.Length);
    复制代码

    以后执行下面的转换:
    1. //获取灰度彩色值
    2. ushort[] ZValues = new ushort[buff.Length];
    3. for (int k = 0; k < buff.Length; k++)
    4. {
    5.      ZValues[k] = (ushort)(buff[k] - short.MinValue);
    6. }

    7. ColorMaps MapColor = new ColorMaps();
    8. ushort minValue = 0, maxValue = 0;
    9. MapColor.FindMinMaxForColor(ZValues, (UInt32)buff.Length, 0, ref minValue, ref maxValue);
    10. Color[] colors = new Color[buff.Length];
    11. MapColor.ToColors(ZValues, minValue, maxValue, 0, ref colors, (UInt32)buff.Length);

    12. int Width = (int)nWidth;
    13. int Height = (int)nHeight;

    14. Bitmap Bimage = new Bitmap(Width, Height);
    15. BitmapData bmdata = Bimage.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
    16. IntPtr intptr = bmdata.Scan0;
    17. byte[] Pixlemaps = new byte[bmdata.Width * bmdata.Height * 3];
    18. //int offset = bmdata.Width*3 - bmdata.Width * 3;

    19. unsafe
    20. {
    21.         byte* pp = (byte*)(void*)bmdata.Scan0;
    22.         for (int k = 0; k < bmdata.Height; k++)
    23.         {
    24.              for (int m = 0; m < bmdata.Width; m++)
    25.               {
    26.                       pp[0] = (byte)(colors[k * bmdata.Width + m].R);
    27.                       pp[1] = (byte)(colors[k * bmdata.Width + m].G);
    28.                       pp[2] = (byte)(colors[k * bmdata.Width + m].B);
    29.                       pp += 3;
    30.                 }
    31.                 //pp += bmdata.Width*3 - bmdata.Width * 3;
    32.           }
    33. }

    34. m_objImage.Dispose();
    35. HOperatorSet.GenImageInterleaved(out m_objImage, intptr, "rgb", Width, Height, 0, "byte", Width, Height, 0, 0, -1, 0);
    36. Bimage.UnlockBits(bmdata);
    复制代码

    我最下面是通过Halcon转换成rgb图的然后显示m_objImage即可,记得声明和初始化,当然你也用用其他的转换!
    提醒:工程必须要勾选“允许不安全代码”,不然无法编译通过!
    微信截图_20200415213631.png

    LmiColorMap.rar (4.66 KB, 下载次数: 17)

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

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

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

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

  • TA的每日心情
    害羞
    2018-5-31 10:31
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    4

    主题

    14

    帖子

    490

    积分

    Rank: 6Rank: 6

    积分
    490

    切换助手验证会员

     楼主| 发表于 2020-4-16 17:53:23 | 显示全部楼层
    绝地武士 发表于 2020-4-15 21:17
    先导入附件包的LmiColorMap.dll,声明命名空间:

    然后得到深度图形的buff缓存数组(pData就是图像指针,nWi ...

    short[] buff = new short[nWidth * nHeight];
    Marshal.Copy(ptData, buff, 0, buff.Length);

    以short为数组时,Marshal.Copy会出现System.AccessViolationException:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”问题。我的深度图是8位的,
    能给出
    short[] buff = new short[nWidth * nHeight];
    Marshal.Copy(ptData, buff, 0, buff.Length);
    调用示例吗?

    另外能给出public string ToColors(ushort[] ZValues, ushort minValue, ushort maxValue, ushort nullValue, ref Color[] colors, uint count);的思路或者源码吗?

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

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

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

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

  • TA的每日心情
    耍酷
    昨天 11:40
  • 签到天数: 911 天

    连续签到: 3 天

    [LV.10]以坛为家III

    377

    主题

    1535

    帖子

    7065

    积分

    Rank: 9

    积分
    7065

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2020-4-16 17:55:29 | 显示全部楼层
    醉梦甜心 发表于 2020-4-16 17:53
    short[] buff = new short[nWidth * nHeight];
    Marshal.Copy(ptData, buff, 0, buff.Length);

    深度图怎么可能是8位呢,8位最高深度值才255啊?如果是LMI默认是16位的就要用short,其他如果是32位的就要用int定义!
    这个dll是LMI官方给的,源码我无法提供给你,原理就是计算最大最小深度值,然后按照颜色查找表颜色等分色彩和数值范围,依次设置RGB的颜色过度,最后产生RGB图,这个RGB图是单独产生的和深度图不一样!
    此代码已经经过验证,LMI的深度图像转RGB图没有问题!
    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
  • TA的每日心情
    害羞
    2018-5-31 10:31
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    4

    主题

    14

    帖子

    490

    积分

    Rank: 6Rank: 6

    积分
    490

    切换助手验证会员

     楼主| 发表于 2020-4-16 18:19:17 | 显示全部楼层
    绝地武士 发表于 2020-4-15 21:17
    先导入附件包的LmiColorMap.dll,声明命名空间:

    然后得到深度图形的buff缓存数组(pData就是图像指针,nWi ...

    大佬好,我把short[]改成byte[]成功了,如果最终获得是彩色点云,而不仅仅是将深度灰度图变为彩色图,比如三维点云基于基准面低的位蓝色,比基准面高的为红色点云。也是颜色映射吗? MapColor.ToColors(ZValues, minValue, maxValue, 0, ref colors, (UInt32)buff.Length);
    实现过程是?可以给出源码参考下。

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

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

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

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

  • TA的每日心情
    害羞
    2018-5-31 10:31
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    4

    主题

    14

    帖子

    490

    积分

    Rank: 6Rank: 6

    积分
    490

    切换助手验证会员

     楼主| 发表于 2020-4-16 18:22:05 | 显示全部楼层
    Criss 发表于 2020-4-16 17:55
    深度图怎么可能是8位呢,8位最高深度值才255啊?如果是LMI默认是16位的就要用short,其他如果是32位的就要 ...

    受教了。

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

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

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

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

  • TA的每日心情
    耍酷
    昨天 11:40
  • 签到天数: 911 天

    连续签到: 3 天

    [LV.10]以坛为家III

    377

    主题

    1535

    帖子

    7065

    积分

    Rank: 9

    积分
    7065

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2020-4-16 18:52:46 | 显示全部楼层
    醉梦甜心 发表于 2020-4-16 18:19
    大佬好,我把short[]改成byte[]成功了,如果最终获得是彩色点云,而不仅仅是将深度灰度图变为彩色图,比如 ...

    你可以改变颜色映射方向,无非就是RGB三个分量的方向和叠加!
    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
  • TA的每日心情
    害羞
    2018-5-31 10:31
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    4

    主题

    14

    帖子

    490

    积分

    Rank: 6Rank: 6

    积分
    490

    切换助手验证会员

     楼主| 发表于 2020-4-17 09:11:32 | 显示全部楼层
    Criss 发表于 2020-4-16 18:52
    你可以改变颜色映射方向,无非就是RGB三个分量的方向和叠加!

    那LMI有关于根据点云深度信息,直接给点云上色的dll吗?

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

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

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

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

  • TA的每日心情
    耍酷
    昨天 11:40
  • 签到天数: 911 天

    连续签到: 3 天

    [LV.10]以坛为家III

    377

    主题

    1535

    帖子

    7065

    积分

    Rank: 9

    积分
    7065

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2020-4-17 09:49:08 | 显示全部楼层
    醉梦甜心 发表于 2020-4-17 09:11
    那LMI有关于根据点云深度信息,直接给点云上色的dll吗?

    点云的目前我们用的是VTK的渲染方式,你可以试试!
    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
  • TA的每日心情
    窃喜
    昨天 15:50
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]常住居民I

    3

    主题

    41

    帖子

    121

    积分

    Rank: 1

    积分
    121
    发表于 2020-4-17 15:36:26 | 显示全部楼层
    看我下面的帖子,C#加halcon实现3D点云
    http://www.ihalcon.com/read-13017.html

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

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

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

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

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

    本版积分规则

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用反馈

    有问题需要咨询站长?| 申请友链| 小黑屋| 手机版| Archiver|  

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

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

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