当前位置: 首页 > news >正文

3.读取图片和图片采集

目录

一、Halcon

1. 图片的基本概念

2. 获取图片方式1-读取本地图片

3. 获取图片方式2-在线采集

4. C#获取图片数据架构

二、VS联合编程

1. 读取本地图片

2.在线采集


一、Halcon

1. 图片的基本概念

1. 图片2. 像素 3. 分辨率4. 位深度5. 不同后缀1. png jpg 2. bmp 6. 图像成像原理7. 图像矩阵8. 灰度9. 黑白和彩色图片1. 单通道2. 三通道 RGB

2. 获取图片方式1-读取本地图片

*1. 读取本地图片
*   1. 菜单 - 文件 - 读取图像
*   2. Ctrl + R
*   3. 直接拖
*   4. 算子
*
*
*2. read_image
*
*3. halcon窗口显示
*   当执行到图像变量的时候,halcon窗口会自动显示当前变量
*
*4. 路径
*   1. 绝对路径
*   2. 相对路径
*      1. 相对于halcon工程文件
*      2. C:/Users/Public/Documents/MVTec/HALCON-19.05-Progress/examples/images
*
*5. 省略图片后缀
*
*6. HObject对象使用
*   1. 定义对象  HObject ho_Image;
*   2. 实例化    HOperatorSet.GenEmptyObj(out ho_Image);
*   3. 释放对象   ho_Image.Dispose();
*   4. 使用      HOperatorSet.ReadImage(out ho_Image, "E:/bmp/card.bmp");
*   5. 释放对象  ho_Image.Dispose();
*
*7. 关于显示
*   1. 在halcon里面 - 当执行到图像变量的时候,halcon窗口会自动显示当前变量
*   2. 在C#里面所有hobject对象都不会自动显示
* 
*8. 显示算子
*   1. disp_obj
*   2. dev_display
*
*9. 自适应显示
*   1. this.hWindowControl1.ImagePart = new Rectangle(0, 0, Width, Height);
*   2. set_part (WindowHandle, 0, 0, Height-1, Width-1)
*
*10. 获取图片分辨率
*
*
*11. Htuple对象
*    1. 定义+实例化  HTuple hv_Height = new HTuple();
*    2. 释放对象     hv_Width.Dispose();hv_Height.Dispose();
*    3. 操作       HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
*    4. 释放对象    hv_Width.Dispose(); hv_Height.Dispose();dev_get_window (WindowHandle)read_image (Image, 'E:/bmp/card.bmp')*read_image (Image, 'card.bmp')
*read_image (Image, 'card')*read_image (Image, 'printer_chip/printer_chip_01')*read_image (Image1, 'can')get_image_size (Image, Width, Height)set_part (WindowHandle, 0, 0, Height-1, Width-1)disp_obj (Image, WindowHandle)

3. 获取图片方式2-在线采集

*在线采集
*1. 一台相机或笔记本摄像头
*
*2. 相机驱动软件
*
*3. halcon - 菜单 - 助手 - Image Acquisition
*   1. 资源 - 图像获取接口 - 自动检测接口 - DirectShow
*   2. 连接 - 设备列表 - 选中操作的相机
*            颜色空间-gray
*            连接 - 实时
*   3.  代码生成 - 插入代码
*
*4. 注意显示
*
** Image Acquisition 01: Code generated by Image Acquisition 01
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'gray', -1, 'false', 'default', '[2]  LW', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)grab_image_async (Image, AcqHandle, -1)* Image Acquisition 01: Do something
endwhile
close_framegrabber (AcqHandle)

4. C#获取图片数据架构

*全局位移图像接口
*1.HObject Image
*
*2.load实例化
*
*读图片或在线采集
*3. 释放
*4. 操作
*
*5.closing释放
*
*子窗体使用图片
*1. 构造函数传参
*2. 静态变量
*3. 委托
*

二、VS联合编程

1. 读取本地图片

    创建一个新项目,在窗口上添加一个button控件双击进去,添下面程序。五步曲(参考上面halcon读取图片程序解释)

  #region 读取图片private void 读取图片ToolStripMenuItem_Click(object sender, EventArgs e){//openFileDialog1也是一个控件this.openFileDialog1.Filter = "bmp图片|*.bmp|png图片|*.png|jpg图片|*.jpg";if (this.openFileDialog1.ShowDialog() == DialogResult.OK){try{HTuple hv_Width = new HTuple();HTuple hv_Height = new HTuple();HObject ho_Image;HOperatorSet.GenEmptyObj(out ho_Image);ho_Image.Dispose();HOperatorSet.ReadImage(out ho_Image, this.openFileDialog1.FileName);hv_Width.Dispose(); hv_Height.Dispose();HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);//this.hWindowControl1.ImagePart = new Rectangle(0, 0, hv_Width, hv_Height);HOperatorSet.SetPart(this.hWindowControl1.HalconWindow, 0, 0, hv_Height - 1, hv_Width - 1);HOperatorSet.DispObj(ho_Image, this.hWindowControl1.HalconWindow);ho_Image.Dispose();hv_Width.Dispose();hv_Height.Dispose();}catch (Exception ex){MessageBox.Show(ex.ToString());}}}#endregion

2.在线采集

同样创建一个checkbox控件,然后编写下面程序

     #region 图像处理-对象(全局变量)HObject ho_Image;HTuple hv_Width = new HTuple();HTuple hv_Height = new HTuple();#endregion

   #region 打开关闭相机HTuple hv_AcqHandle = new HTuple();//1.实例化相机句柄private void OpenCam(){try{hv_AcqHandle.Dispose();//2.消除相机句柄HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "gray",-1, "false", "default", "[2]  LW", 0, -1, out hv_AcqHandle);//3.使用相机句柄HOperatorSet.GrabImageStart(hv_AcqHandle, -1);}catch (Exception ex){MessageBox.Show(ex.ToString());LogHelper.WriteLog("打开相机", ex);//写入日志}}private void CloseCam(){try{HOperatorSet.CloseFramegrabber(hv_AcqHandle);//关闭相机hv_AcqHandle.Dispose();//4.销毁相机句柄}catch (Exception ex){MessageBox.Show(ex.ToString());LogHelper.WriteLog("关闭相机", ex);//写入日志}}#endregion#region 实时显示,启动线程Thread ThreadVideo = null;//定义一个线程private void mcb_video_CheckedChanged(object sender, EventArgs e){if (this.mcb_video.Checked){ThreadVideo = new Thread(runThreadVideo);//把方法放入线程ThreadVideo.IsBackground = true;//标记为后台线程ThreadVideo.Start();}else{ThreadVideo.Abort();//终止线程}}//方法private void runThreadVideo(){while (true){try{ho_Image.Dispose();HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);hv_Width.Dispose(); hv_Height.Dispose();HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);HOperatorSet.SetPart(this.hWindowControl1.HalconWindow, 0, 0, hv_Height - 1, hv_Width - 1);HOperatorSet.DispObj(ho_Image, this.hWindowControl1.HalconWindow);}catch (Exception ex){LogHelper.WriteLog("实时显示",ex);}}}#endregion

相关文章:

  • C#中的QUIC实现
  • 多协议物联网关的方案测试-基于米尔全志T536开发板
  • 【redis】数据结构及操作命令
  • 深入解析:如何实时获取Socket接收缓冲区的数据量
  • 《王者荣耀》系统架构深度技术解析
  • Spring 的IoC 和 AOP
  • Day37 早停策略和模型权重的保存
  • 【精选】基于SpringBoot的宠物互助服务小程序平台开发 微信小程序宠物互助系统 宠物互助小程序平台设计与实现 支持救助发布+领养申请+交流互动功能
  • 前端跨域解决方案(6):Nginx
  • MySQL 表结构设计中的约束机制详解
  • [设计模式]创建型模式-单例模式
  • 物联网控制器:一台顶N台!路由器、PLC控制器、网关、工控机……
  • PowerShell批量处理文件名称/内容的修改
  • 【二进制安全作业】250617课上作业4 - start
  • Ntfs!LfsGetLbcb函数分析之Ntfs!LfsPrepareLfcbForLogRecord
  • Sentinel 服务限流机制
  • opencv依据图像类型读取图像像素点
  • 软件公司进军无人机领域的战略指南与生态合作全景-优雅草卓伊凡
  • Tomcat项目本地部署(Servlet为例)
  • 性能测试-jmeter实战3
  • 桂林旅游网站建设/长尾关键词快速排名软件
  • 舆情报告制度/seo整站怎么优化
  • wordpress 内存/深圳seo优化推广公司
  • 沈阳专门代做网站的/个人网站设计毕业论文
  • 网站速度优化工具/手机搭建网站
  • 国内知名网站建设企业/搜索引擎优化是指什么意思