You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.4 KiB
C#

using HalconDotNet;
using Rs.Framework;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rs.MotionPlat.Commom
{
public class ProductModel
{
public string RecipeName { get; set; }
public string ModelName { get; set; } = "test";
/// <summary>
/// ROI区域
/// </summary>
public HObject RoiRegion { get; set; }
/// <summary>
/// 移除的区域
/// </summary>
public HObject RemovedRegion { get; set; }
/// <summary>
/// 最终的模板区域
/// </summary>
public HObject FinalRegion
{
get {
if(RoiRegion != null && RoiRegion.CountObj()>0) {
if (RemovedRegion != null && RemovedRegion.CountObj() > 0)
{
HOperatorSet.Difference(RoiRegion, RemovedRegion, out HObject diffRegion);
return diffRegion;
}
return RoiRegion;
}
return null;
}
}
/// <summary>
/// 模板图片
/// </summary>
public HObject TemplateImage { get; set; }
public HObject SourceImage { get; set; }
public int SaveModel()
{
//保存原图
string dirname = Path.Combine(Environment.CurrentDirectory, "Recipe", "Test");
if(!Directory.Exists(dirname))
{
Directory.CreateDirectory(dirname);
}
if(SourceImage!= null && SourceImage.CountObj()>0)
{
HOperatorSet.WriteImage(SourceImage, "bmp", 0, dirname + "\\" + ModelName);
}
else
{
return -1;
}
//保存ROI区域
if(RoiRegion!=null && RoiRegion.CountObj()>0)
{
HOperatorSet.WriteRegion(RoiRegion, dirname + "\\" + ModelName + "_1.reg");
}
else { return -1; }
if (RemovedRegion != null && RemovedRegion.CountObj() > 0)
{
//保存Removed区域
HOperatorSet.WriteRegion(RemovedRegion, dirname + "\\" + ModelName + "_2.reg");
}
else { return -1; }
//保存最后的区域
if (FinalRegion != null && FinalRegion.CountObj() > 0)
{
//保存Removed区域
HOperatorSet.WriteRegion(FinalRegion, dirname + "\\" + ModelName + "_3.reg");
HOperatorSet.ReduceDomain(SourceImage, FinalRegion, out HObject image);
TemplateImage= image;
}
else { return -1; }
if (SourceImage != null && SourceImage.CountObj() > 0)
{
HOperatorSet.ReduceDomain(SourceImage, RoiRegion, out HObject imageReduaced);
//保存
HOperatorSet.WriteImage(imageReduaced, "bmp", 0, dirname + "\\" + ModelName + "_2");
}
//保存模板
HOperatorSet.CreateShapeModel(TemplateImage, "auto", AngleTool.Deg2Rad(-10), AngleTool.Deg2Rad(200), "auto", "auto", "use_polarity", 50, "auto", out HTuple modelID);
HOperatorSet.GetShapeModelContours(out HObject modelContours, modelID, 1);
HOperatorSet.WriteShapeModel(modelID, "Recipe/Test/m.shm");
return 0;
}
}
}