设置首页收藏本站
开启左侧

大佬们,Halcon扫码能有确定二维码方向的办法吗

[复制链接]
20250426Hh 发表于 2025-5-6 19:15:05 | 显示全部楼层 |阅读模式
如图,扫码后 第一张 获取 属性如下
坐标顺序{X=865,Y=474}|{X=868,Y=788}|{X=567,Y=794}|{X=562,Y=479} 旋转角度-179镜像yes

第一张

第一张

第二张

第二张
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 20250426Hh 发表于 2025-5-6 19:16:10 | 显示全部楼层
本帖最后由 20250426Hh 于 2025-5-6 19:32 编辑

如图,扫码后
第一张 获取 属性如下
坐标顺序{X=865,Y=474}|{X=868,Y=788}|{X=567,Y=794}|{X=562,Y=479} 旋转角度-179镜像yes
第二张 获取 属性如下
坐标顺序{X=862,Y=584}|{X=867,Y=904}|{X=561,Y=910}|{X=555,Y=589} 旋转角度-179镜像any
这里解释一下,放上来的是裁剪尺寸过的,但是 坐标顺序没有变,
在程序里面 定义 正向是两个大定位块在北方,一个定位块在西南角为正,与halcon 定义方向一致,然后 上面两张图像都是 从正向 顺时针 旋转 90度左右得到,,,,
也就是 正向 的左上角在 旋转后的 右上角,所以 坐标顺序(顺时针) 是 左上,右上,右下,左下,然后这里角度是 用重心指向右侧边中心和X周的夹角,与halcon的orientation (Orientation of the region 区域方向)定义不同,咱也不知道这个Orientation是代表啥,貌似 和 矩形长宽的 宽窄 有关

但是 获取 mirrored 属性 大多数都是 no  然后 上面两张 第一张 是yes   第二张 是 any,,,
然后 计算方向 就变得 不确定起来,有可以 确定 旋转 方向的 办法吗???



奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 20250426Hh 发表于 2025-5-6 20:06:02 | 显示全部楼层
下面放计算角度的方式
  1. // 获取轮廓点坐标   ////角点顺序反应 符号方向
  2.             HTuple rows, cols;
  3.             HOperatorSet.GetContourXld(ho_FirstXLD, out rows, out cols);
  4.             ////rows [386.487548828125, 379.621337890625, 523.152404785156, 528.820617675781, 386.487548828125]
  5.             ////cols [333.817138671875, 192.054656982422, 189.228698730469, 331.953887939453, 333.817138671875]
  6.             // 将坐标存入列表(每个轮廓的点集合) 定义 L型 左上|左下-->右下    QR中间位置方块 为左上 下方块为左下
  7.             
  8.             
  9.             for (int j = 0; j < rows.Length-1; j++)
  10.             {
  11.                 cornerPos.Add(   new Point((int)cols[j].D, (int)rows[j].D)  );
  12.             }
  13.             PointF CenterPos = new PointF();
  14.             CenterPos.X = cornerPos.Sum(x => x.X) * 0.25F;
  15.             CenterPos.Y = cornerPos.Sum(x => x.Y) * 0.25F;
  16.             PointF CenterPosRightLine = new PointF();
  17. ////计算 右上角 右下角的中心点
  18. switch (codeType)
  19. {
  20.     case "QR Code":
  21.         if (mirrored.Equals("no")|| mirrored.Equals("any"))  ////The contours begin in the top left corner  if no mirrored  then  continue   clockwise 顺时针
  22.         {
  23.             /////QR码 第一个坐标[0]是 左上角 顺时针顺序    [1]右上   [2]右下   [3]左下
  24.             CenterPosRightLine.X = (cornerPos[1].X + cornerPos[2].X) * 0.5F;
  25.             CenterPosRightLine.Y = (cornerPos[1].Y + cornerPos[2].Y) * 0.5F;
  26.         }
  27.         else
  28.         {
  29.             ////QR码 第一个坐标[0]是 左上角 逆时针顺序    [1]左下   [2]右下   [3]右上
  30.             CenterPosRightLine.X = (cornerPos[2].X + cornerPos[3].X) * 0.5F;
  31.             CenterPosRightLine.Y = (cornerPos[2].Y + cornerPos[3].Y) * 0.5F;
  32.         }
  33.         break;
  34.     case "Data Matrix":
  35.         if (mirrored.Equals("no"))
  36.         {
  37.             /////DM 第一个坐标[0]是 左上角 顺时针顺序    [1]右上   [2]右下   [3]左下
  38.             CenterPosRightLine.X = (cornerPos[1].X + cornerPos[2].X) * 0.5F;
  39.             CenterPosRightLine.Y = (cornerPos[1].Y + cornerPos[2].Y) * 0.5F;
  40.         }
  41.         else
  42.         {
  43.             ////DM码 第一个坐标[0]是 右下角 逆时针顺序    [1]右上   [2]左上   [3]左下
  44.             CenterPosRightLine.X = (cornerPos[0].X + cornerPos[1].X) * 0.5F;
  45.             CenterPosRightLine.Y = (cornerPos[0].Y + cornerPos[1].Y) * 0.5F;
  46.         }
  47.         break;
  48.     default:
  49.         break;
  50. }
  51. ////// 计算向量差值(注意 Halcon 的坐标系:row=Y, column=X)
  52. ////double deltaX = CenterPosRightLine.X - CenterPos.X;  // 列方向(X 轴)
  53. ////double deltaY = CenterPosRightLine.Y - CenterPos.Y;  // 行方向(Y 轴,向下为正)
  54. ////// 计算角度(弧度),并转换为度数
  55. ////double angleRad = Math.Atan2(deltaY, deltaX);   坐标系不同 计算出来 角度 不对
  56. HTuple hAngleRad;
  57. HOperatorSet.AngleLx(CenterPos.Y, CenterPos.X, CenterPosRightLine.Y, CenterPosRightLine.X, out hAngleRad);
  58. double angleDeg = hAngleRad.D * (180.0 / Math.PI);
  59. theGodAngle = Math.Round(angleDeg, 1);
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2025-5-7 08:45:41 | 显示全部楼层
QR码,可以通过三个大的黑色矩形边框+右下角一个小矩形标志可以确定方向。
DM码主要是边缘的L型定位。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 20250426Hh 发表于 2025-5-7 13:42:02 | 显示全部楼层
本帖最后由 20250426Hh 于 2025-5-7 13:46 编辑
Criss 发表于 2025-5-7 08:45
QR码,可以通过三个大的黑色矩形边框+右下角一个小矩形标志可以确定方向。
DM码主要是边缘的L型定位。 ...
呃,那样的话,要写很多运算了,主要 HALCON 这里 说坐标顺序反应了 方向,就打算用这个来XLD contours that surround thesuccessfully decoded data code symbols. The order of the contour pointsreflects the orientation of the detected symbols. The contours begin in the topleft corner (see 'orientation' inthe reference of get_data_code_2d_results) andcontinue clockwise.
https://www.51halcon.com/halcon/reference/find_data_code_2d.html


奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
3351422122 发表于 2025-5-7 15:42:57 | 显示全部楼层
非常感谢您的分享,学习一下。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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