c#联合Halcon进行几何定位

这篇具有很好参考价值的文章主要介绍了c#联合Halcon进行几何定位。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主要就是c#联合Halcon进行几何定位(也可以叫做模型匹配),本程序主要是基于单模板,进行单个模板的匹配以及循环遍历模板的匹配,如果您觉得文章不错,麻烦您关注博主,如有不对的地方,还希望大家提出来,我们共同进步。

一: 程序配置

1: 首先配置在winfom引用程序中引用两个halcon应用程序的库:分别是halcon.dll和halcondotnet.dll,而后把这两个库放在你的应用程序输出路径下面,然后在下边的图片中取消首选32位的勾选。

c#联合halcon标定定位贴合复检,c#,人工智能,机器学习,Powered by 金山文档
c#联合halcon标定定位贴合复检,c#,人工智能,机器学习,Powered by 金山文档

2:右键点击工具箱,单击选择项,然后点击浏览按钮,引用halcondotnet.dll控件,点击确定就可以显示HWindowControl控件了

c#联合halcon标定定位贴合复检,c#,人工智能,机器学习,Powered by 金山文档
c#联合halcon标定定位贴合复检,c#,人工智能,机器学习,Powered by 金山文档
c#联合halcon标定定位贴合复检,c#,人工智能,机器学习,Powered by 金山文档

二: 程序界面:

用到的控件分别为:

1个图形窗口HWindowControl,2个ListBox控件,5个button控件

c#联合halcon标定定位贴合复检,c#,人工智能,机器学习,Powered by 金山文档

程序界面

三:运行效果展示

1:点击读取图片选择一个图片并画ROI区域,在下边可以看到读取图像成功,并且获得模板的基准。

c#联合halcon标定定位贴合复检,c#,人工智能,机器学习,Powered by 金山文档

2:点击图片列表载入可以选择多幅图片并且在右上角的listbox控件中显示多幅图片的路径。

c#联合halcon标定定位贴合复检,c#,人工智能,机器学习,Powered by 金山文档
c#联合halcon标定定位贴合复检,c#,人工智能,机器学习,Powered by 金山文档

3:选中右上角listbox控件的一个项然后单击单步模型匹配会根据不同方向,位置同一个图像进行几何定位

c#联合halcon标定定位贴合复检,c#,人工智能,机器学习,Powered by 金山文档

4:点击遍历查找模型可以快速地对右上角listbox控件中的所有图片进行快熟匹配

c#联合halcon标定定位贴合复检,c#,人工智能,机器学习,Powered by 金山文档

四:程序代码

读取模型图片按钮代码

 private void button读取图片_Click(object sender, EventArgs e)
        {
            HTuple width, height;
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.Filter = "jpg文件(*.jpg)|*.jpg|png文件(*.png)|*.png|bmp文件(*.bmp文件)|*.bmp";
            if (openFile.ShowDialog()==DialogResult.OK)
            {
                hImage.ReadImage(openFile.FileName);
                //设置读取的图片的大小,并且刚好设置在窗口中
                HOperatorSet.GetImageSize(hImage, out width, out height);
                HOperatorSet.SetPart(hw1.HalconWindow, 0, 0, height, width);
                //图像显示
                hImage.DispObj(hw1.HalconWindow);
                listBox信息.Items.Add("读取单个图像成功");
            }
        }

画ROI按钮:

private void button画ROI_Click(object sender, EventArgs e)
        {
            try
            {
                //取消焦点
                hw1.Focus();
                HOperatorSet.SetColor(hw1.HalconWindow, "red");
                        HOperatorSet.DrawRectangle2(hw1.HalconID, out row, out column, out phi, out length1, out length);
                        HOperatorSet.GenRectangle2(out rectangle2, row, column, phi, length1, length);
                        HOperatorSet.DispObj(rectangle2, hw1.HalconID);
                HOperatorSet.ReduceDomain(hImage, rectangle2, out ho_ImageReduced);
                HOperatorSet.CreateShapeModel(ho_ImageReduced, "auto", (new HTuple(-180)).TupleRad()
, (new HTuple(360)).TupleRad(), "auto", "auto", "use_polarity", "auto", "auto",
out modelId);
                HOperatorSet.FindShapeModel(hImage, modelId, (new HTuple(-180)).TupleRad()
    , (new HTuple(360)).TupleRad(), 0.5, 1, 0.5, "least_squares", 0, 0.9, out hv_Row1,
    out hv_Column1, out hv_Angle, out hv_Score);
                //显示匹配结果
                dev_display_shape_matching_results(modelId, "red", hv_Row1, hv_Column1, hv_Angle,
     1, 1, 0);
                //产生十字交叉点
                HOperatorSet.GenCrossContourXld(out ho_Cross, hv_Row1, hv_Column1, 15, (new HTuple(-45)).TupleRad());
                HOperatorSet.DispObj(ho_Cross, hw1.HalconWindow);
                listBox信息.Items.Add("画模板ROI区域成功");
                listBox信息.Items.Add("获得基准模板成功");
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

图片列表载入按钮:

    private void button图片载入_Click(object sender, EventArgs e)
        {
            //多个图片的载入
            OpenFileDialog openFile = new OpenFileDialog();
            //设置打开属性Multiselect为true表示允许选中多个图片文件
            openFile.Multiselect = true;
            openFile.Filter = "JPG文件|*.jpg|PNG文件|*.png|BMP文件|*.bmp";
            if (openFile.ShowDialog()==DialogResult.OK)
            {
               
                foreach (var item in  openFile.FileNames)
                {
                    listBox文件.Items.Add(item);
                }
            }
        }

单步查找模型按钮:

private void button单模型查找_Click(object sender, EventArgs e)
        {
            HImage hImagetwo = new HImage();
            string a = Convert.ToString(listBox文件.SelectedItem);
            hImagetwo.ReadImage(a);
            HTuple Width, Height;

            //设置图片以合适的方式显示在图片控件上面
            HOperatorSet.GetImageSize(hImagetwo, out Width, out Height);
            HOperatorSet.SetPart(hw1.HalconWindow, 0, 0, Height, Width);
            HOperatorSet.DispObj(hImagetwo, hw1.HalconWindow);
            HOperatorSet.FindShapeModel(hImagetwo, modelId, (new HTuple(-180)).TupleRad()
     , (new HTuple(360)).TupleRad(), 0.3, 1, 0.5, "least_squares", 0, 0.7, out hv_Row1,
     out hv_Column1, out hv_Angle, out hv_Score);
            //显示匹配结果
            dev_display_shape_matching_results(modelId, "red", hv_Row1, hv_Column1, hv_Angle,
 1, 1, 0);
            //产生十字交叉点
            HOperatorSet.GenCrossContourXld(out ho_Cross, hv_Row1, hv_Column1, 15, (new HTuple(-45)).TupleRad());
            HOperatorSet.DispObj(ho_Cross, hw1.HalconWindow);
            listBox信息.Items.Add("单个匹配图像成功");
        }

遍历查找模型按钮:

       private void button循环遍历查找_Click(object sender, EventArgs e)
        {
            HImage hImagethree = new HImage();
            for (int i = 0; i < listBox文件.Items.Count; i++)
            {
                int index = listBox文件.FindString(Convert.ToString(listBox文件.Items[i]));
                if (index != ListBox.NoMatches)
                {
                    listBox文件.SetSelected(index, true);  //表示在listbox文件框中当前循环遍历的是哪一个
                    string  filename = Convert.ToString(listBox文件.SelectedItem);
                    hImagethree.ReadImage(filename);
                    HTuple Width, Height;

                    //设置图片以合适的方式显示在图片控件上面
                    HOperatorSet.GetImageSize(hImagethree, out Width, out Height);
                    HOperatorSet.SetPart(hw1.HalconWindow, 0, 0, Height, Width);
                    HOperatorSet.DispObj(hImagethree, hw1.HalconWindow);
                    HOperatorSet.FindShapeModel(hImagethree, modelId, (new HTuple(-180)).TupleRad()
             , (new HTuple(360)).TupleRad(), 0.3, 1, 0.5, "least_squares", 0, 0.7, out hv_Row1,
             out hv_Column1, out hv_Angle, out hv_Score);
                    //显示匹配结果
                   if (hv_Row1>0&&hv_Column1>0)
                   {
                        //显示匹配结果
                        dev_display_shape_matching_results(modelId, "red", hv_Row1, hv_Column1, hv_Angle,
             1, 1, 0);
                        //产生十字交叉点
                        HOperatorSet.GenCrossContourXld(out ho_Cross, hv_Row1, hv_Column1, 15, (new HTuple(-45)).TupleRad());
                        HOperatorSet.DispObj(ho_Cross, hw1.HalconWindow);
                        listBox信息.Items.Add("循环遍历中匹配单个图像成功");
                    }
                }
            } 
        }

完整程序代码:文章来源地址https://www.toymoban.com/news/detail-807723.html

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HalconDotNet;

namespace 多模板匹配
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //设置画的模式
            HOperatorSet.SetDraw(hw1.HalconWindow, "margin");
        }
        HImage hImage = new HImage();
        private void button读取图片_Click(object sender, EventArgs e)
        {
            HTuple width, height;
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.Filter = "jpg文件(*.jpg)|*.jpg|png文件(*.png)|*.png|bmp文件(*.bmp文件)|*.bmp";
            if (openFile.ShowDialog()==DialogResult.OK)
            {
                hImage.ReadImage(openFile.FileName);
                //设置读取的图片的大小,并且刚好设置在窗口中
                HOperatorSet.GetImageSize(hImage, out width, out height);
                HOperatorSet.SetPart(hw1.HalconWindow, 0, 0, height, width);
                //图像显示
                hImage.DispObj(hw1.HalconWindow);
                listBox信息.Items.Add("读取单个图像成功");
            }
        }



        HTuple color;
        #region  画ROI区域产生的变量
        //创建模板的编号
        HTuple modelId;
        //查询模板的中间坐标,角度,还有模型实例的分数
        HTuple hv_Row1 = null, hv_Column1 = null, hv_Angle = null, hv_Score;
        //十字坐标
        HObject ho_Cross;
        //矩形2
        HTuple row, column, phi, length1, length;



        HObject rectangle2, ho_ImageReduced;
        public void dev_display_shape_matching_results(HTuple hv_ModelID, HTuple hv_Color,
    HTuple hv_Row, HTuple hv_Column, HTuple hv_Angle, HTuple hv_ScaleR, HTuple hv_ScaleC,
    HTuple hv_Model)
        {



            // Local iconic variables 

            HObject ho_ModelContours = null, ho_ContoursAffinTrans = null;

            // Local control variables 

            HTuple hv_NumMatches = null, hv_Index = new HTuple();
            HTuple hv_Match = new HTuple(), hv_HomMat2DIdentity = new HTuple();
            HTuple hv_HomMat2DScale = new HTuple(), hv_HomMat2DRotate = new HTuple();
            HTuple hv_HomMat2DTranslate = new HTuple();
            HTuple hv_Model_COPY_INP_TMP = hv_Model.Clone();
            HTuple hv_ScaleC_COPY_INP_TMP = hv_ScaleC.Clone();
            HTuple hv_ScaleR_COPY_INP_TMP = hv_ScaleR.Clone();

            // Initialize local and output iconic variables 
            HOperatorSet.GenEmptyObj(out ho_ModelContours);
            HOperatorSet.GenEmptyObj(out ho_ContoursAffinTrans);
            //This procedure displays the results of Shape-Based Matching.
            //
            hv_NumMatches = new HTuple(hv_Row.TupleLength());
            if ((int)(new HTuple(hv_NumMatches.TupleGreater(0))) != 0)
            {
                if ((int)(new HTuple((new HTuple(hv_ScaleR_COPY_INP_TMP.TupleLength())).TupleEqual(
                    1))) != 0)
                {
                    HOperatorSet.TupleGenConst(hv_NumMatches, hv_ScaleR_COPY_INP_TMP, out hv_ScaleR_COPY_INP_TMP);
                }
                if ((int)(new HTuple((new HTuple(hv_ScaleC_COPY_INP_TMP.TupleLength())).TupleEqual(
                    1))) != 0)
                {
                    HOperatorSet.TupleGenConst(hv_NumMatches, hv_ScaleC_COPY_INP_TMP, out hv_ScaleC_COPY_INP_TMP);
                }
                if ((int)(new HTuple((new HTuple(hv_Model_COPY_INP_TMP.TupleLength())).TupleEqual(
                    0))) != 0)
                {
                    HOperatorSet.TupleGenConst(hv_NumMatches, 0, out hv_Model_COPY_INP_TMP);
                }
                else if ((int)(new HTuple((new HTuple(hv_Model_COPY_INP_TMP.TupleLength()
                    )).TupleEqual(1))) != 0)
                {
                    HOperatorSet.TupleGenConst(hv_NumMatches, hv_Model_COPY_INP_TMP, out hv_Model_COPY_INP_TMP);
                }
                for (hv_Index = 0; (int)hv_Index <= (int)((new HTuple(hv_ModelID.TupleLength())) - 1); hv_Index = (int)hv_Index + 1)
                {
                    ho_ModelContours.Dispose();
                    HOperatorSet.GetShapeModelContours(out ho_ModelContours, hv_ModelID.TupleSelect(
                        hv_Index), 1);
                    if (HDevWindowStack.IsOpen())
                    {
                        HOperatorSet.SetColor(HDevWindowStack.GetActive(), hv_Color.TupleSelect(
                            hv_Index % (new HTuple(hv_Color.TupleLength()))));
                    }
                    HTuple end_val18 = hv_NumMatches - 1;
                    HTuple step_val18 = 1;
                    for (hv_Match = 0; hv_Match.Continue(end_val18, step_val18); hv_Match = hv_Match.TupleAdd(step_val18))
                    {
                        if ((int)(new HTuple(hv_Index.TupleEqual(hv_Model_COPY_INP_TMP.TupleSelect(
                            hv_Match)))) != 0)
                        {
                            HOperatorSet.HomMat2dIdentity(out hv_HomMat2DIdentity);
                            HOperatorSet.HomMat2dScale(hv_HomMat2DIdentity, hv_ScaleR_COPY_INP_TMP.TupleSelect(
                                hv_Match), hv_ScaleC_COPY_INP_TMP.TupleSelect(hv_Match), 0, 0, out hv_HomMat2DScale);
                            HOperatorSet.HomMat2dRotate(hv_HomMat2DScale, hv_Angle.TupleSelect(hv_Match),
                                0, 0, out hv_HomMat2DRotate);
                            HOperatorSet.HomMat2dTranslate(hv_HomMat2DRotate, hv_Row.TupleSelect(
                                hv_Match), hv_Column.TupleSelect(hv_Match), out hv_HomMat2DTranslate);
                            ho_ContoursAffinTrans.Dispose();
                            HOperatorSet.AffineTransContourXld(ho_ModelContours, out ho_ContoursAffinTrans,
                                hv_HomMat2DTranslate);
                            //显示
                            hw1.HalconWindow.DispObj(ho_ContoursAffinTrans);
                            //
                            if (HDevWindowStack.IsOpen())
                            {
                                HOperatorSet.DispObj(ho_ContoursAffinTrans, HDevWindowStack.GetActive()
                                    );
                            }
                        }
                    }
                }
            }
            ho_ModelContours.Dispose();
            ho_ContoursAffinTrans.Dispose();

            return;
        }
        #endregion
        private void button画ROI_Click(object sender, EventArgs e)
        {
            try
            {
                //取消焦点
                hw1.Focus();
                HOperatorSet.SetColor(hw1.HalconWindow, "red");
                        HOperatorSet.DrawRectangle2(hw1.HalconID, out row, out column, out phi, out length1, out length);
                        HOperatorSet.GenRectangle2(out rectangle2, row, column, phi, length1, length);
                        HOperatorSet.DispObj(rectangle2, hw1.HalconID);
                HOperatorSet.ReduceDomain(hImage, rectangle2, out ho_ImageReduced);
                HOperatorSet.CreateShapeModel(ho_ImageReduced, "auto", (new HTuple(-180)).TupleRad()
, (new HTuple(360)).TupleRad(), "auto", "auto", "use_polarity", "auto", "auto",
out modelId);
                HOperatorSet.FindShapeModel(hImage, modelId, (new HTuple(-180)).TupleRad()
    , (new HTuple(360)).TupleRad(), 0.5, 1, 0.5, "least_squares", 0, 0.9, out hv_Row1,
    out hv_Column1, out hv_Angle, out hv_Score);
                //显示匹配结果
                dev_display_shape_matching_results(modelId, "red", hv_Row1, hv_Column1, hv_Angle,
     1, 1, 0);
                //产生十字交叉点
                HOperatorSet.GenCrossContourXld(out ho_Cross, hv_Row1, hv_Column1, 15, (new HTuple(-45)).TupleRad());
                HOperatorSet.DispObj(ho_Cross, hw1.HalconWindow);
                listBox信息.Items.Add("画模板ROI区域成功");
                listBox信息.Items.Add("获得基准模板成功");
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void button图片载入_Click(object sender, EventArgs e)
        {
            //多个图片的载入
            OpenFileDialog openFile = new OpenFileDialog();
            //设置打开属性Multiselect为true表示允许选中多个图片文件
            openFile.Multiselect = true;
            openFile.Filter = "JPG文件|*.jpg|PNG文件|*.png|BMP文件|*.bmp";
            if (openFile.ShowDialog()==DialogResult.OK)
            {
               
                foreach (var item in  openFile.FileNames)
                {
                    listBox文件.Items.Add(item);
                }
            }
        }
        private void button单模型查找_Click(object sender, EventArgs e)
        {
            HImage hImagetwo = new HImage();
            string a = Convert.ToString(listBox文件.SelectedItem);
            hImagetwo.ReadImage(a);
            HTuple Width, Height;

            //设置图片以合适的方式显示在图片控件上面
            HOperatorSet.GetImageSize(hImagetwo, out Width, out Height);
            HOperatorSet.SetPart(hw1.HalconWindow, 0, 0, Height, Width);
            HOperatorSet.DispObj(hImagetwo, hw1.HalconWindow);
            HOperatorSet.FindShapeModel(hImagetwo, modelId, (new HTuple(-180)).TupleRad()
     , (new HTuple(360)).TupleRad(), 0.3, 1, 0.5, "least_squares", 0, 0.7, out hv_Row1,
     out hv_Column1, out hv_Angle, out hv_Score);
            //显示匹配结果
            dev_display_shape_matching_results(modelId, "red", hv_Row1, hv_Column1, hv_Angle,
 1, 1, 0);
            //产生十字交叉点
            HOperatorSet.GenCrossContourXld(out ho_Cross, hv_Row1, hv_Column1, 15, (new HTuple(-45)).TupleRad());
            HOperatorSet.DispObj(ho_Cross, hw1.HalconWindow);
            listBox信息.Items.Add("单个匹配图像成功");
        }
        private void button循环遍历查找_Click(object sender, EventArgs e)
        {
            HImage hImagethree = new HImage();
            for (int i = 0; i < listBox文件.Items.Count; i++)
            {
                int index = listBox文件.FindString(Convert.ToString(listBox文件.Items[i]));
                if (index != ListBox.NoMatches)
                {
                    listBox文件.SetSelected(index, true);  //表示在listbox文件框中当前循环遍历的是哪一个
                    string  filename = Convert.ToString(listBox文件.SelectedItem);
                    hImagethree.ReadImage(filename);
                    HTuple Width, Height;

                    //设置图片以合适的方式显示在图片控件上面
                    HOperatorSet.GetImageSize(hImagethree, out Width, out Height);
                    HOperatorSet.SetPart(hw1.HalconWindow, 0, 0, Height, Width);
                    HOperatorSet.DispObj(hImagethree, hw1.HalconWindow);
                    HOperatorSet.FindShapeModel(hImagethree, modelId, (new HTuple(-180)).TupleRad()
             , (new HTuple(360)).TupleRad(), 0.3, 1, 0.5, "least_squares", 0, 0.7, out hv_Row1,
             out hv_Column1, out hv_Angle, out hv_Score);
                    //显示匹配结果
                   if (hv_Row1>0&&hv_Column1>0)
                   {
                        //显示匹配结果
                        dev_display_shape_matching_results(modelId, "red", hv_Row1, hv_Column1, hv_Angle,
             1, 1, 0);
                        //产生十字交叉点
                        HOperatorSet.GenCrossContourXld(out ho_Cross, hv_Row1, hv_Column1, 15, (new HTuple(-45)).TupleRad());
                        HOperatorSet.DispObj(ho_Cross, hw1.HalconWindow);
                        listBox信息.Items.Add("循环遍历中匹配单个图像成功");
                    }
                }
            }
               
            
                
            
        }
    }
}

如果你觉得文章不错,希望给作者点一个大大的关注,我在这里感谢大家

到了这里,关于c#联合Halcon进行几何定位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#联合Halcon机器视觉框架源码

    本软件参考EV开发,共用 50多个算子 模块,基于 WPF+Halcon ,是非常不错的学习框架,需要什么功能可以自己添加,插件式开发非常方便。 整体代码目录结构如下: 一、Main模块 软件启动入口位置,将NExtVision设为启动项目。 LoadFrm用于初始化、增加预编译及加载插件等功能。

    2024年04月12日
    浏览(42)
  • C#与halcon联合 缩放移动自适应图像

    解决缩太小崩溃问题,联合鼠标滚轮事件 解决移动太快图像刷新闪烁问题 这里我们采用不拉伸显示函数

    2024年02月14日
    浏览(31)
  • C#联合halcon开发,连接相机颜色不对,无法连接相机

    相机可以在海康软件MVS中打开(颜色正常),但是在C#开发的程式中无法打开(彩色相机颜色显示异常)。 1.查看相机和MVS软件是否连接成功; 2.如果成功,连接C#程序; 3.程序连接失败,在MVS中连接相机,查看MVS里面相机的图像处理-像素格式,确定相机是否为黑白还是彩色

    2024年02月04日
    浏览(30)
  • C#联合halcon读取上一张下一张图像

    namespace picture { public partial class Form1 : Form { public Form1 () { InitializeComponent(); } //获得文件夹中所有图片文件的全路径 string [] path = Directory.GetFiles( @“C:UsersynPicturesC#” ); int i = 0 ; //下一张 private void button2_Click ( object sender, EventArgs e) { //每点一下,i++,path[i]指向下一张图片 i++;

    2024年02月15日
    浏览(32)
  • c#联合halcon机器视觉通用视觉框架2。流程化开发

    c#联合halcon机器视觉通用视觉框架2。 流程化开发。 缺陷检测,定位,测量,OCR识别。 拉控件式。 在现代工业领域中,机器视觉技术已经成为了一个非常重要的应用方向。然而,要将这种技术应用到具体的生产场景中,需要一个有效的视觉框架来实现。在这方面,c#联合hal

    2024年04月13日
    浏览(37)
  • 【机器视觉】线阵相机模型说明以及使用HALCON标定助手对线阵相机进行标定

    线阵相机矫正所需参数共17个,其中11个参数为内参,6个参数为外参。 线阵相机内参 CamParam 数量共11个,模型如下: CamParam:= [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]  Focus : 镜头焦距;  Kappa : 镜头畸变系数;正:枕形畸变 负:桶状畸变  Sx : 传感器像元宽度

    2024年02月16日
    浏览(32)
  • 基于halcon实现视觉定位框架(C#做主算法,C#、MFC、Qt二次开发)【附源码】

    本文主要实现halcon二次开发,基于C#做视觉算法的编辑,已C#做用户空间,然后使用C#、C++(MFC、Qt)分别实现调用,从而实现多相机的使用。 换句话说就是:C#做算法及主界面开发,然后把生成的控件dll移交给C#或者MFC或者QT进行二次调用实现二次开发,这里主要想展示的是多

    2024年01月19日
    浏览(69)
  • Baumer工业相机堡盟相机BGAPI SDK如何联合Halcon进行图像转换(C++)(将byte二进制图像数据转为Hobject)

    Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。   Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可

    2024年02月09日
    浏览(54)
  • 使用HALCON标定板快速标定,纠正成像畸变

    gen_caltab ( : : XNum, YNum, MarkDist, DiameterRatio, CalPlateDescr, CalPlatePSFile : ) 为具有矩形排列标记的标定板生成标定板描述文件和相应的后记文件。 该算子可以制作所需的标定板参数文件 Caltab.descr 和标定板图像文件 Caltab.ps。 参数: 输入: XNum X方向的标记点数。 默认值:7 建议值:5、

    2024年02月13日
    浏览(31)
  • halcon相机标定

            1、摄像头拍出来的原始图片是存在畸变的,我们需要通过标定来矫正这种畸变。         2、相机坐标系 到 世界坐标系 的转化,需要知道图片上像素点的距离转化到实际中代表多长。         3、标定分为内参和外参,内参和相机本身的材质等有关,和其它无关,

    2024年02月05日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包