HImage m_hImage = new HImage();
HWindow m_hWindow;
//读取图片
private void readImageBtn_Click(object sender, EventArgs e)
{
HTuple ww, hh;
openFileDialog1.Filter = "图像文件|*jpg;*.bmp;*.png;*.tif|所有文件|*.*";
openFileDialog1.RestoreDirectory = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string ImagePath = openFileDialog1.FileName;
m_hImage.ReadImage(ImagePath);//读取图片
m_hWindow = hWindowControl.HalconWindow;
HOperatorSet.GetImageSize(m_hImage, out ww, out hh);//窗口自适应图片
m_hWindow.SetPart((HTuple)0, (HTuple)0, (HTuple)hh-1, (HTuple)ww-1);
m_hImage.DispObj(m_hWindow);//显示图像
grayImageBtn.Enabled = true;
}
}
//灰度化
private void grayImageBtn_Click(object sender, EventArgs e)
{
HImage ho_GrayImage;
ho_GrayImage = m_hImage.Rgb1ToGray();
HOperatorSet.DispObj(ho_GrayImage, hWindowControl.HalconWindow);
ho_GrayImage.Dispose();
}
以下是找圆的半径:
HTuple ww, hh, Row, Column, Radius;
HImage ho_GrayImage;
HRegion tempRegion, balls, connectBall, selectBall, FinalBalls;
m_hImage.ReadImage("../pads.png");
HOperatorSet.GetImageSize(m_hImage, out ww, out hh);//自适应图片
m_hWindow = hWindowControl.HalconWindow;
m_hWindow.SetPart((HTuple)0, (HTuple)0, (HTuple)hh, (HTuple)ww);
ho_GrayImage = m_hImage.Rgb1ToGray();
tempRegion = ho_GrayImage.Threshold((HTuple)145, (HTuple)171);//二直化
m_hWindow.SetColor("red");
balls = tempRegion.OpeningCircle((HTuple)4);//开运算
connectBall = balls.Connection();//联通
selectBall = connectBall.SelectShape("area", "and", 500, 1000);//面积选择
FinalBalls = selectBall.SortRegion("first_point", "true", "column");//排序
FinalBalls.SmallestCircle(out Row, out Column, out Radius);//获取最小圆的半径和中心
for (int i = 0; i < Row.Length; i++)
{
HOperatorSet.SetTposition(m_hWindow, (Row[i] - 2 * Radius[i]), Column[i]);
HOperatorSet.WriteString(m_hWindow, "半径:" + Radius[i]);//显示半径
}
FinalBalls.DispObj(m_hWindow);//显示图像