Halcon 和 C# 联合编程 - 如何使用开源项目 ViewROI

26 篇文章 9 订阅

摘自:https://www.cnblogs.com/zdfffg/p/10271126.html

ViewROI类只有在Halcon12.0版之前的有,所以要从该版本中获取该类

声明

HWndCtrl _viewCtrl;
ROIController _roiCtrl;

初始化

_viewCtrl = new HWndCtrl(hWindowControl);
_roiCtrl = new ROIController();
_viewCtrl.useROIController(_roiCtrl);

显示图像

HImage hImage = new HImage(image);
_viewCtrl.addIconicVar(hImage); // 注意不可以是HObject类型
_viewCtrl.resetWindow();
_viewCtrl.repaint();

设置/更改查看图像的模式

// 正常模式(重置)
_viewCtrl.resetAll();
_viewCtrl.repaint();
_viewCtrl.setViewState(HWndCtrl.MODE_VIEW_NONE);

// 移动模式
_viewCtrl.setViewState(HWndCtrl.MODE_VIEW_MOVE);

// 放大模式
_viewCtrl.setViewState(HWndCtrl.MODE_VIEW_ZOOMWINDOW);

// 缩放模式
_viewCtrl.setViewState(HWndCtrl.MODE_VIEW_ZOOM);

创建ROI

// 设定ROI类型,这里以正交长方形为例
ROIRectangle1 rect1 = new ROIRectangle1();
_roiCtrl.setROIShape(rect1);

// 添加这段程序,在指定位置创建ROI;假如没有这段程序,则在鼠标点击的地方创建ROI
_roiCtrl.mouseDownAction(x, y);

懂得以上这些就能对这个项目进行基础应用啦,当然这个项目的功能远不止这些,甚至该项目太久没更新了,功能也还不够强大,远远不能满足日益复杂的需求,而这些都需要深入研究该项目的每个成员变量、方法和委托,然后再根据自己的需求完善该项目。

以上为摘自大神的文章,针对上面的做一些补充:

1、由于使用Hdevelop开发视觉后导出的都是静态函数HOperatorSet,而此时整的图像是Hobject的,需要将图片改成Himage类型的,再添加进去进行显示。

private void HobjectToHimage(HObject hobject, ref HImage image)
        {
            HTuple pointer, type, width, height;
            HOperatorSet.GetImagePointer1(hobject, out pointer, out type, out width, out height);
            image.GenImage1(type, width, height, pointer);
        }

        private void HobjectToRGBHimage(HObject hobject, ref HImage image)
        {
            HTuple pointerRed, pointerGreen, pointerBlue, type, width, height;
            HOperatorSet.GetImagePointer3(hobject, out pointerRed, out  pointerGreen, out  pointerBlue, out  type, out  width, out  height);
            image.GenImage3(type, width, height, pointerRed, pointerGreen, pointerBlue);
        }

2、假如是已经保存的一个ROI然后读取出来,实现时需要加上一个函数在类ROICircle : ROI

public void MakeROICircle(double roiRow1, double roiCol1, double roiRadius)
        {
            midR = roiRow1;
            midC = roiCol1;
            radius = roiRadius;            
        }

然后再程序中调用ROI的地方加上以下语句

            roiController.setDrawColor("", "", "red");//设置ROI颜色
            ROICircle roiCircle = new ROICircle();//实例化一个ROICircle
            roiCircle.MakeROICircle(23, 23, 45);//定义一个这么大的圆
            
            roiController.setROIShape(roiCircle);
            roiController.mouseDownAction(23, 23);

roiController.mouseDownAction(23,23),该语句会调用createROI函数,此函数原本为半径为定值的ROI进行,修改成可以变动的即可。

public override void createROI(double midX, double midY)
		{
			midR = midY;ff
			midC = midX;

            radius = radius;

			row1 = midR;
			col1 = midC + radius;
		}

此时即可读取上来一个存储的ROI并加入roiController类中。

3.获取图像控件中的ROI参数信息

            HTuple ht;
            ht=((ROI)roiController.getROIList()[0]).getModelData();

4.显示捕捉到的圆形轮廓时,线条颜色要进行设置,不然放大或刷新时会变成黑色

            viewController.changeGraphicSettings(GraphicsContext.GC_COLOR, "blue");//设置轮廓颜色
            viewController.addIconicVar(ho_Contour);
            viewController.repaint();

代码下载链接https://download.csdn.net/download/yue1453544229/11161966

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值