摘自: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.youkuaiyun.com/download/yue1453544229/11161966