C#联合halcon开发,连接相机颜色不对,无法连接相机

这篇具有很好参考价值的文章主要介绍了C#联合halcon开发,连接相机颜色不对,无法连接相机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相机可以在海康软件MVS中打开(颜色正常),但是在C#开发的程式中无法打开(彩色相机颜色显示异常)。

1.异常处理

1.查看相机和MVS软件是否连接成功;
2.如果成功,连接C#程序;
3.程序连接失败,在MVS中连接相机,查看MVS里面相机的图像处理-像素格式,确定相机是否为黑白还是彩色相机,如下图:

c#海康sdk 设置balanceratio失败,C#,笔记,c#,工业相机


由上图可知该相机为彩色相机。

4.  如果是彩色相机,但是颜色显示不对,根据彩色相机默认格式(可以将相机断电重新启动,再打开MVS软件连接查看默认图像格式),修改程序以下两个地方

Camera.MV_CC_SetEnumValueByString_NET("PixelFormat", "BayerRG8");

 HOperatorSet.GenImage1(out image, "byte", frame.stFrameInfo.nWidth, frame.stFrameInfo.nHeight, frame.pBufAddr);
 image = BayerToRgb(image, "bayer_rg");
 image = RotateImage(image);

根据不同于颜色的排列,我们把Bayer分为BayerRG、BayerBG、BayerGB、BayerBG四种。

工业相机支持的图像格式种类,以海康工业相机为例子

c#海康sdk 设置balanceratio失败,C#,笔记,c#,工业相机

2.代码片段

连接相机封装类,以海康相机为例,程序要成功运行需要安装MVS软件,C#二次开发类,如下:

using HalconDotNet;
using MvCamCtrl.NET;

public class SvLucid
    {
        private MyCamera Camera;

        public override void Initial()
        {
            try
            {
                base.Initial();
                Camera = new MyCamera();
                var infoList = new MyCamera.MV_CC_DEVICE_INFO_LIST();
                MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE, ref infoList);

                var result = -1;
                for (int i = 0; i < infoList.nDeviceNum; i++)
                {
                    var deviceInfo = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(infoList.pDeviceInfo[i], typeof(MyCamera.MV_CC_DEVICE_INFO));
                    if (((MyCamera.MV_GIGE_DEVICE_INFO)MyCamera.ByteToStruct(deviceInfo.SpecialInfo.stGigEInfo, typeof(MyCamera.MV_GIGE_DEVICE_INFO))).chSerialNumber == SN)
                    {
                        Camera.MV_CC_CreateDevice_NET(ref deviceInfo);
                        result = Camera.MV_CC_OpenDevice_NET();
                    }
                }

                if (result != 0)
                {
                    throw new Exception($"相機{SN}連接失敗");
                }

                result = 0;
                if (Colorful == "黑白")
                {
                    result += Camera.MV_CC_SetEnumValueByString_NET("PixelFormat", "Mono8");
                }
                else
                {
                    result += Camera.MV_CC_SetEnumValueByString_NET("PixelFormat", "BayerRG8");
                    result += Camera.MV_CC_SetEnumValueByString_NET("BalanceWhiteAuto", "Off");
                    result += Camera.MV_CC_SetEnumValueByString_NET("BalanceRatioSelector", "Red");
                    result += Camera.MV_CC_SetFloatValue_NET("BalanceRatio", 2f);
                    result += Camera.MV_CC_SetEnumValueByString_NET("BalanceRatioSelector", "Green");
                    result += Camera.MV_CC_SetFloatValue_NET("BalanceRatio", 1f);
                    result += Camera.MV_CC_SetEnumValueByString_NET("BalanceRatioSelector", "Blue");
                    result += Camera.MV_CC_SetFloatValue_NET("BalanceRatio", 2f);
                }

                result += Camera.MV_CC_SetIntValue_NET("GevSCPSPacketSize", 9000);
                result += Camera.MV_CC_SetIntValue_NET("GevSCPD", 80);
                result += Camera.MV_CC_SetEnumValueByString_NET("TriggerSelector", "FrameStart");
                result += Camera.MV_CC_SetEnumValueByString_NET("TriggerMode", "On");
                result += Camera.MV_CC_SetEnumValueByString_NET("TriggerSource", "Software");
                result += Camera.MV_CC_SetEnumValueByString_NET("TriggerActivation", "RisingEdge");
                result += Camera.MV_CC_SetEnumValue_NET("ExposureAuto", 0);
                result += Camera.MV_CC_SetEnumValue_NET("GainAuto", 0);
                result += Camera.MV_CC_SetFloatValue_NET("ExposureTime", (float)Exposure);
                result += Camera.MV_CC_SetFloatValue_NET("Gain", (float)Gain);
                result += Camera.MV_CC_StartGrabbing_NET();

                if (result != 0)
                {
                    throw new Exception($"相機{SN}開啟失敗");
                }

                Thread.Sleep(500);
                Snap();
            }
            catch (Exception ex)
            {
                SvMaster.Log.WriteError(ex);
            }
        }

        public override void Close()
        {
            try
            {
                Camera.MV_CC_StopGrabbing_NET();
                Camera.MV_CC_CloseDevice_NET();
                Camera.MV_CC_DestroyDevice_NET();
            }
            catch (Exception ex)
            {
                SvMaster.Log.WriteError(ex);
            }
        }

        public override void AdaptCamera()
        {
            try
            {
                Camera.MV_CC_SetFloatValue_NET("ExposureTime", (float)Exposure);
                Camera.MV_CC_SetFloatValue_NET("Gain", (float)Gain);
            }
            catch (Exception ex)
            {
                SvMaster.Log.WriteError(ex);
            }
        }


        public override HObject Snap()
        {
            HObject image = null;
            var frame = new MyCamera.MV_FRAME_OUT();
            try
            {
                Camera.MV_CC_SetCommandValue_NET("TriggerSoftware");
                if (Camera.MV_CC_GetImageBuffer_NET(ref frame, 2000) == 0)
                {
                    if (frame.stFrameInfo.nLostPacket > 0)
                    {
                        throw new Exception($"相機{SN}取像丢帧失敗");
                    }
                    HOperatorSet.GenImage1(out image, "byte", frame.stFrameInfo.nWidth, frame.stFrameInfo.nHeight, frame.pBufAddr);
                    image = BayerToRgb(image, "bayer_rg");
                    image = RotateImage(image);
                }
                else
                {
                    throw new Exception($"相機{SN}取像失敗");
                }
            }
            catch (Exception ex)
            {
                SvMaster.Log.WriteError(ex);
            }
            Camera.MV_CC_FreeImageBuffer_NET(ref frame);
            return image;
        }

    }

 说明: 引用MvCameraControl.Net.dll,在MVS安装目录下可以找到,可以在项目中引用。文章来源地址https://www.toymoban.com/news/detail-766456.html

到了这里,关于C#联合halcon开发,连接相机颜色不对,无法连接相机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • vp与vs联合开发-通过CogAcqFifoTool工具连接相机

    1.完成相机硬件配置后 2.完成vp与vs联合开发配置功能后 1.创建winform 项目  目的 : 搭建 界面应用 2.  1. vpp文件存入 项目的debug 目录中   目的: 在项目中加载本地vpp文件 读取相机工具     1.控件CogRecordDisplay   用于显示相机拍摄照片和实施显示的窗口 2和3 分别控制按钮事件

    2024年02月04日
    浏览(47)
  • C#与 Halcon 联合编程

    显示图像C#与 Halcon 联合编程: 1、调用 Halcon 图像处理数据库,是否调用成功,是利用 Halcon图像显示控件—能否正确显示图像进行判断。 如何利用 C#与 Halcon 联合编程 调用 Halcon 图像显示控件来显示图像。 1.创建 C#项目,创建 Windows 窗体应用程序。 2.项目中引用 Halcon 的 DLL

    2023年04月12日
    浏览(51)
  • c#联合Halcon进行几何定位

    1: 首先配置在winfom引用程序中引用两个halcon应用程序的库:分别是halcon.dll和halcondotnet.dll,而后把这两个库放在你的应用程序输出路径下面,然后在下边的图片中取消首选32位的勾选。 2:右键点击工具箱,单击选择项,然后点击浏览按钮,引用 halcondotnet.dll控件,点击确定就

    2024年01月20日
    浏览(39)
  • C#联合Halcon机器视觉框架源码

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

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

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

    2024年02月14日
    浏览(42)
  • 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日
    浏览(40)
  • C# +HALCON 工业相机调试

    HALCON error #5312: Image acquisition:device cannot be initialized in operator    winform和HDevelop同时对相机进行连接导致的。关闭其中一个就可以正常连接相机。 HALCON error #5301 Image acquisition: wrong color depth   取相时,报异常。原因是open_framegrabber的ColorSpace参数设置为rgb。但是相机是黑白相机。

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

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

    2024年02月09日
    浏览(63)
  • halcon不能连接海康相机解决方法(仅供参考)

    halcon不能连接相机有很多原因,这里作者给出其中一种的解决方法。 首先需要自行先下载海康软件,   1.首先点开Development, 2.根据图片的路径,点开以下文件夹  3.根据自己电脑安装的halcon版本打开对应文件夹     4.我的电脑是win64位的,根据自己的电脑打开对应的文件夹。

    2024年02月12日
    浏览(39)
  • Baumer工业相机堡盟相机BGAPI SDK联合OpenCV进行Mat图像转换(C#)

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

    2024年02月09日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包