通过c#代码直连相机

//连接硬件的接口

ICogFrameGrabber  mGrabbe = null  //默认设置为空。

//声明一个相机类型的接口
 ICogAcqFifo mFifo = null;  //默认设置为空。

ICogImage  Image = null;

//加载相机的方法,此方法在窗体加载方法中调用
private void Initel()
{
    //获取已经连接的相机
    CogFrameGrabbers frameGrabbers = new CogFrameGrabbers();
    // 判断是否有相机,连接的相机可能不止有一个
    if (frameGrabbers.Count < 1)
    {
        MessageBox.Show("相机未连接");

    }
    //现在只有一台相机 假如有多台
    foreach (ICogFrameGrabber item in frameGrabbers)
    {
        //将相机 赋值给 接口
        mGrabber = item;
        //创建采集 接口。Generic GigEVision (Mono) 设置相机模式黑白图,
        mFifo = item.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey, 0, true);
        //窗体加载的时候
        // 采图 完成之后 跳转
        mFifo.Complete += MFifo_Complete;
    }
}

  //生成的事件  彩图完成之后 会自动跳转
  private void MFifo_Complete(object sender, CogCompleteEventArgs e)
  {
      int numReadyVal, numPendingVal; 
      bool busyVal;
      //异常处理
      try
      {
          CogImage8Grey image = new CogImage8Grey();
          CogAcqInfo info = new CogAcqInfo();
          //获取一下 采集的信息 
          mFifo.GetFifoState(out numPendingVal , out numReadyVal, out busyVal);
          //判断 采集信息 有没有
          if (numReadyVal > 0)
          {
              //把图像设置成相机获取到的
              image = mFifo.CompleteAcquireEx(info)as CogImage8Grey;

              //显示图像
              cogRecordDisplay1.Image = image;

              images = image;
          }
      }
      catch (Exception ex) { }
  }

//通过点击事件进行采图显示,点击时调用了MFifo_Complete方法

        private void button1_Click(object sender, EventArgs e)
        {
            // 采图  调用接口 进行采图
            mFifo.StartAcquire();
        }

// 因为是直接连接相机,图像显示在  没办法调节曝光之类,我们可以自己写一个


        //设置曝光
        private void button2_Click(object sender, EventArgs e)
        {
            //拿到 输入框中 输入的参数
            int exps = Convert.ToInt32(textBox1.Text);
            SetEx(exps);
        }
        // 封装一个设置曝光的方法,也可以不封装直接在button2里写
        private void SetEx(int exp)
        {
            //设置曝光
            mFifo.OwnedExposureParams.Exposure = exp;
        }

// 保存图像有两种方法

 //方法一 保存图像的方法 通过图像保存工具
 private void WriteImage(ICogImage image) 
 {
     // 获取当前程序的运行路径
     string path = Directory.GetCurrentDirectory() + "\\图片";
     //没有有文件夹 需要创建
     if (!Directory.Exists(path))
     {
         //创建文件夹
         Directory.CreateDirectory(path);
     }
     //定义 图像的名称
     string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".png";

     //通过图像保存工具 保存
     CogImageFileTool fileTool = new CogImageFileTool();
     fileTool.InputImage = image;
     fileTool.Operator.Open($"{path}\\{fileName}", CogImageFileModeConstants.Write);
     fileTool.Run();
 }

 //方法二 保存图像 
 private void WriteImageDate(CogRecordDisplay display)
 {
     // 获取当前程序的运行路径
     string path = Directory.GetCurrentDirectory() + "\\图片Bitmap";
     //没有有文件夹 需要创建
     if (!Directory.Exists(path))
     {
         //创建文件夹
         Directory.CreateDirectory(path);
     }
     //定义 图像的名称
     string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg";

     // 创建Bitmap 类
     Bitmap bitmap = display.CreateContentBitmap(Cognex.VisionPro.Display.CogDisplayContentBitmapConstants.Image) as Bitmap;
     bitmap.Save(path+"\\"+fileName,System.Drawing.Imaging.ImageFormat.Jpeg);
 }

      //保存图像
      private void button3_Click(object sender, EventArgs e)
      {
          WriteImage(images); 传入图像
          WriteImageDate(cogRecordDisplay1); //方法2传入显示图像控件名称
      }

//读取图像

  //读取图像
  private void button4_Click(object sender, EventArgs e)
  {
      //将读到的图像 显示到Display上
      //cogRecordDisplay1.Image = ReadImage();
      //第二种
      cogRecordDisplay1.Image = ReadImage2();
      //适应控件 大小
      cogRecordDisplay1.Fit();
  }


  //读图片的方法一
  public ICogImage ReadImage()
  {
      //要读的图片的路径
      string path = "D:\\VisionPro 授课\\机器视觉六班\\03 第三天 几何工具 与 简单的脚本\\作业\\火花塞\\火花塞图片\\2.bmp";
      // 使用图像读取工具
      CogImageFileTool imageFileTool = new CogImageFileTool();
      imageFileTool.Operator.Open(path, CogImageFileModeConstants.Read);
      imageFileTool.Run();
      return imageFileTool.OutputImage;
  }

  //读图片的方法二
  public ICogImage ReadImage2()
  {
      //要读的图片的路径
      string path = "D:\\VisionPro 授课\\机器视觉六班\\03 第三天 几何工具 与 简单的脚本\\作业\\火花塞\\火花塞图片\\2.bmp";

      // 通过过Bitmap 来读取图像
      Bitmap bimage = new Bitmap(path);

      ICogImage image = new CogImage8Grey(bimage);
      return image;
      
      
  }

  // 打开弹窗选择显示图片
  private void button5_Click(object sender, EventArgs e)
  {
      OpenFileDialog of = new OpenFileDialog();
      //of.ShowDialog();
      //筛选图片格式
      of.Filter = "(*.jpg;*.jpeg;*.bmp) | *.jpg;*.jpeg;*.bmp";

      if (of.ShowDialog() == DialogResult.OK)
      {
          //拿出 选择文件的路径
          string fileName = of.FileName;
          CogImageFileTool imageFileTool = new CogImageFileTool();
          imageFileTool.Operator.Open(fileName, CogImageFileModeConstants.Read);
          imageFileTool.Run();
          cogRecordDisplay1.Image = imageFileTool.OutputImage;
      }
  }


        //读取图像
        private void button4_Click(object sender, EventArgs e)
        {
            //将读到的图像 显示到Display上
            //cogRecordDisplay1.Image = ReadImage();
            //第二种
            cogRecordDisplay1.Image = ReadImage2();
            //适应控件 大小
            cogRecordDisplay1.Fit();
        }
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
连接海康相机可以通过海康提供的SDK来实现。以下是连接海康相机C#代码示例: 1. 引用SDK 在项目中添加HCNetSDK.dll和PlayCtrl.dll两个海康提供的SDK文件。 2. 初始化SDK 在程序启动时,需要初始化海康SDK,代码如下: ``` public static bool InitSDK() { bool result = CHCNetSDK.NET_DVR_Init(); if (!result) { int errorCode = CHCNetSDK.NET_DVR_GetLastError(); Console.WriteLine("SDK初始化失败,错误码:" + errorCode); } return result; } ``` 3. 登录相机 初始化SDK成功后,需要使用SDK提供的登录函数来登录相机代码如下: ``` public static int Login(string ipAddress, int port, string userName, string password) { CHCNetSDK.NET_DVR_DEVICEINFO_V30 deviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30(); int userId = CHCNetSDK.NET_DVR_Login_V30(ipAddress, port, userName, password, ref deviceInfo); if (userId < 0) { int errorCode = CHCNetSDK.NET_DVR_GetLastError(); Console.WriteLine("登录失败,错误码:" + errorCode); } return userId; } ``` 4. 实时预览 成功登录相机后,可以使用SDK提供的实时预览函数来获取相机的实时图像。代码如下: ``` public static bool StartRealPlay(int userId, IntPtr playHandle) { CHCNetSDK.NET_DVR_PREVIEWINFO previewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO(); previewInfo.hPlayWnd = IntPtr.Zero; previewInfo.lChannel = 1; // 通道号 previewInfo.dwStreamType = 0; // 码流类型:主码流 previewInfo.dwLinkMode = 0x0000; // 连接方式:TCP方式 previewInfo.bBlocked = true; // 阻塞取流:是 bool result = CHCNetSDK.NET_DVR_RealPlay_V40(userId, ref previewInfo, null, IntPtr.Zero) != -1; if (result) { int errorCode = CHCNetSDK.NET_DVR_GetLastError(); Console.WriteLine("实时预览失败,错误码:" + errorCode); } return result; } ``` 以上是连接海康相机C#代码示例,需要注意的是,海康SDK提供的函数和参数较多,具体实现可以根据自己的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值