51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 262|回复: 2

[资料] C#开发Halcon实现缩放、平移功能代码

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 623 天

    连续签到: 1 天

    [LV.9]以坛为家II

    138

    主题

    700

    帖子

    4054

    积分

    Rank: 9

    积分
    4054

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

    发表于 2020-2-24 17:27:52 | 显示全部楼层 |阅读模式

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

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

    x
    1. //缩放图像
    2.         private void hWindowControl1_HMouseWheel(object sender, HMouseEventArgs e)
    3.         {
    4.             HTuple Zoom, Row, Col, Button;
    5.             HTuple Row0, Column0, Row00, Column00, Ht, Wt, r1, c1, r2, c2;
    6.             if (e.Delta > 0)
    7.             {
    8.                 Zoom = 1.5;
    9.             }
    10.             else
    11.             {
    12.                 Zoom = 0.5;
    13.             }
    14.             HOperatorSet.GetMposition(WindowID, out Row, out Col, out Button);
    15.             HOperatorSet.GetPart(WindowID, out Row0, out Column0, out Row00, out Column00);
    16.             Ht = Row00 - Row0;
    17.             Wt = Column00 - Column0;
    18.             if (Ht * Wt < 32000 * 32000 || Zoom == 1.5)//普通版halcon能处理的图像最大尺寸是32K*32K。如果无限缩小原图像,导致显示的图像超出限制,则会造成程序崩溃
    19.             {
    20.                 r1 = (Row0 + ((1 - (1.0 / Zoom)) * (Row - Row0)));
    21.                 c1 = (Column0 + ((1 - (1.0 / Zoom)) * (Col - Column0)));
    22.                 r2 = r1 + (Ht / Zoom);
    23.                 c2 = c1 + (Wt / Zoom);
    24.                 HOperatorSet.SetPart(WindowID, r1, c1, r2, c2);
    25.                 HOperatorSet.ClearWindow(WindowID);
    26.                 HOperatorSet.DispObj(ho_image, WindowID);
    27.             }
    28.         }
    29.         //鼠标按下,记录当前坐标值
    30.         private void hWindowControl1_HMouseDown(object sender, HMouseEventArgs e)
    31.         {
    32.             HTuple Row, Column, Button;
    33.             HOperatorSet.GetMposition(WindowID, out Row, out Column, out Button);
    34.             RowDown = Row;    //鼠标按下时的行坐标
    35.             ColDown = Column; //鼠标按下时的列坐标
    36.         }
    37.         //鼠标抬起,实现图像移动
    38.         private void hWindowControl1_HMouseUp(object sender, HMouseEventArgs e)
    39.         {
    40.             HTuple row1, col1, row2, col2,Row, Column, Button;
    41.             HOperatorSet.GetMposition(WindowID, out Row, out Column, out Button);
    42.             double RowMove = Row - RowDown;   //鼠标弹起时的行坐标减去按下时的行坐标,得到行坐标的移动值
    43.             double ColMove = Column - ColDown;//鼠标弹起时的列坐标减去按下时的列坐标,得到列坐标的移动值
    44.             HOperatorSet.GetPart(WindowID, out row1, out col1, out row2, out col2);//得到当前的窗口坐标
    45.             HOperatorSet.SetPart(WindowID, row1 - RowMove, col1 - ColMove, row2 - RowMove, col2 - ColMove);//这里可能有些不好理解。以左上角原点为参考点
    46.             HOperatorSet.ClearWindow(WindowID);
    47.             if (ImageHeight != null)
    48.             {
    49.                 HOperatorSet.DispObj(ho_image, WindowID);
    50.             }
    51.             else
    52.             {
    53.                 MessageBox.Show("请加载一张图片");
    54.             }      
    55.         }
    56.         //鼠标移动,实时显示当前坐标与灰度值
    57.         private void hWindowControl1_HMouseMove(object sender, HMouseEventArgs e)
    58.         {
    59.             HTuple Row, Column, Button, pointGray;
    60.             HOperatorSet.GetMposition(WindowID, out Row, out Column, out Button);              //获取当前鼠标的坐标值
    61.             if (ImageHeight != null && (Row > 0 && Row < ImageHeight) && (Column > 0 && Column < ImageWidth))//设置3个条件项,防止程序崩溃。
    62.             {
    63.                 HOperatorSet.GetGrayval(ho_image, Row, Column, out pointGray);                 //获取当前点的灰度值
    64.             }
    65.             else
    66.             {
    67.                 pointGray = "_";
    68.             }
    69.             String str = String.Format("Row:{0}  Column:{1}  Gray:{2}", Row, Column, pointGray); //格式化字符串
    70.             label1.Text = str;                                                                   //在label控件上显示数值        
    71.         }
    72.         //全屏显示图像,使缩放后的图像回到原始大小
    73.         private void button_FullWindow_Click(object sender, EventArgs e)
    74.         {
    75.             HOperatorSet.SetPart(WindowID, 0, 0, ImageHeight - 1, ImageWidth - 1);
    76.             HOperatorSet.ClearWindow(WindowID);
    77.             HOperatorSet.DispObj(ho_image, WindowID);
    78.         }
    复制代码

    网上找的代码,说实话上面这个代码是一般般,建议把再添加一个控件的MOVE方法,可以实现滚轮缩放,按住鼠标移动就拖拽,不像上面这个代码一样一卡一卡再显示!
    出现闪烁的话,在ClearWindow之前设置
    1. HOperatorSet.SetSystem("flush_graphic", "false");
    复制代码

    清除窗口后再重新打开
    1. HOperatorSet.SetSystem("flush_graphic", "true");
    复制代码

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

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

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

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

    该用户从未签到

    0

    主题

    9

    帖子

    20

    积分

    Rank: 1

    积分
    20
    发表于 2020-6-16 14:28:21 | 显示全部楼层
    多谢楼主分享!!

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

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

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

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

  • TA的每日心情
    萌萌
    前天 09:08
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    17

    帖子

    42

    积分

    Rank: 1

    积分
    42
    发表于 2020-6-30 14:21:38 | 显示全部楼层
    后面两个你说添加的没看懂。。

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

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

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

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

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

    本版积分规则

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

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

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

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

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