cs
复制代码
*关闭已经打开的窗口
dev_close_window ()
*打开新窗口
dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
for i := 1 to 2 by 1
*打开一张图像
read_image (Image, 'cable' + i)
*获取一个三通道图像里的每个通道的图像数据
decompose3 (Image, Red, Green, Blue)
*将RGB三通道数据转化为HSV色彩空间的三通道图像数据
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
*对HSV图像中的饱和度通道进行阈值操作
threshold (Saturation, HighSaturation, 100, 255)
*获取上述阈值操作后区域中的色调通道图像数据
reduce_domain (Hue, HighSaturation, HueHighSaturation)
*对上述色调通道图像数据进行阈值处理
threshold (HueHighSaturation, Yellow, 20, 50)
*获取区域里连接的组件
connection (Yellow, ConnectedRegions)
*保留ConnectedRegions里的最大的区域
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 0)
*对SelectedRegions进行闭运算操作
closing_circle (SelectedRegions, Yellow, 3.5)
*将Yellow区域里的图像剪切出来
reduce_domain (Image, Yellow, ImageReduced)
*显示图像
dev_clear_window()
dev_set_color ('white')
dev_set_draw ('margin')
*显示黄色的电线
dev_display (Image)
dev_display (Yellow)
stop ()
endfor
cs
复制代码
#region 识别排线中的黄色的线束
public void RecognizeLine(HTuple winId, string imagePath)
{
// Local iconic variables
HObject ho_Image = null, ho_Red = null, ho_Green = null;
HObject ho_Blue = null, ho_Hue = null, ho_Saturation = null, ho_Intensity = null;
HObject ho_HighSaturation = null, ho_HueHighSaturation = null;
HObject ho_Yellow = null, ho_ConnectedRegions = null, ho_SelectedRegions = null;
HObject ho_ImageReduced = null;
// Local control variables
HTuple hv_WindowHandle = new HTuple(), hv_i = new HTuple();
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Image);
HOperatorSet.GenEmptyObj(out ho_Red);
HOperatorSet.GenEmptyObj(out ho_Green);
HOperatorSet.GenEmptyObj(out ho_Blue);
HOperatorSet.GenEmptyObj(out ho_Hue);
HOperatorSet.GenEmptyObj(out ho_Saturation);
HOperatorSet.GenEmptyObj(out ho_Intensity);
HOperatorSet.GenEmptyObj(out ho_HighSaturation);
HOperatorSet.GenEmptyObj(out ho_HueHighSaturation);
HOperatorSet.GenEmptyObj(out ho_Yellow);
HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
HOperatorSet.GenEmptyObj(out ho_ImageReduced);
//关闭已经打开的窗口
//if (HDevWindowStack.IsOpen())
//{
// HOperatorSet.CloseWindow(HDevWindowStack.Pop());
//}
//打开新窗口
//HOperatorSet.SetWindowAttr("background_color", "black");
//HOperatorSet.OpenWindow(0, 0, 640, 480, 0, "visible", "", out hv_WindowHandle);
//HDevWindowStack.Push(hv_WindowHandle);
//for (hv_i = 1; (int)hv_i <= 2; hv_i = (int)hv_i + 1)
{
//打开一张图像
//using (HDevDisposeHelper dh = new HDevDisposeHelper())
//{
// ho_Image.Dispose();
// HOperatorSet.ReadImage(out ho_Image, "cable" + hv_i);
//}
HOperatorSet.ReadImage(out ho_Image, imagePath);
//获取一个三通道图像里的每个通道的图像数据
ho_Red.Dispose(); ho_Green.Dispose(); ho_Blue.Dispose();
HOperatorSet.Decompose3(ho_Image, out ho_Red, out ho_Green, out ho_Blue);
//将RGB三通道数据转化为HSV色彩空间的三通道图像数据
ho_Hue.Dispose(); ho_Saturation.Dispose(); ho_Intensity.Dispose();
HOperatorSet.TransFromRgb(ho_Red, ho_Green, ho_Blue, out ho_Hue, out ho_Saturation,
out ho_Intensity, "hsv");
//对HSV图像中的饱和度通道进行阈值操作
ho_HighSaturation.Dispose();
HOperatorSet.Threshold(ho_Saturation, out ho_HighSaturation, 100, 255);
//获取上述阈值操作后区域中的色调通道图像数据
ho_HueHighSaturation.Dispose();
HOperatorSet.ReduceDomain(ho_Hue, ho_HighSaturation, out ho_HueHighSaturation
);
//对上述色调通道图像数据进行阈值处理
ho_Yellow.Dispose();
HOperatorSet.Threshold(ho_HueHighSaturation, out ho_Yellow, 20, 50);
//获取区域里连接的组件
ho_ConnectedRegions.Dispose();
HOperatorSet.Connection(ho_Yellow, out ho_ConnectedRegions);
//保留ConnectedRegions里的最大的区域
ho_SelectedRegions.Dispose();
HOperatorSet.SelectShapeStd(ho_ConnectedRegions, out ho_SelectedRegions, "max_area",
0);
//对SelectedRegions进行闭运算操作
ho_Yellow.Dispose();
HOperatorSet.ClosingCircle(ho_SelectedRegions, out ho_Yellow, 3.5);
//将Yellow区域里的图像剪切出来
ho_ImageReduced.Dispose();
HOperatorSet.ReduceDomain(ho_Image, ho_Yellow, out ho_ImageReduced);
//显示图像
//if (HDevWindowStack.IsOpen())
{
HOperatorSet.ClearWindow(winId);
}
//if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetColor(winId, "white");
}
//if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetDraw(winId, "margin");
}
//显示黄色的电线
//if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_Image, winId);
}
//if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_Yellow, winId);
}
// stop(...); only in hdevelop
}
ho_Image.Dispose();
ho_Red.Dispose();
ho_Green.Dispose();
ho_Blue.Dispose();
ho_Hue.Dispose();
ho_Saturation.Dispose();
ho_Intensity.Dispose();
ho_HighSaturation.Dispose();
ho_HueHighSaturation.Dispose();
ho_Yellow.Dispose();
ho_ConnectedRegions.Dispose();
ho_SelectedRegions.Dispose();
ho_ImageReduced.Dispose();
hv_WindowHandle.Dispose();
hv_i.Dispose();
}
#endregion