前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【简单的CV】1.5 相机控制

【简单的CV】1.5 相机控制

作者头像
EdenChen
发布2019-11-06 13:32:33
9930
发布2019-11-06 13:32:33
举报
文章被收录于专栏:ROBOTEDU

1.5 相机控制

01

相机介绍

相机是利用光学成像的原理进行记录摄像的设备。

小孔成像原理和照相机原理

传统底片式相机结构

数码相机结构

相机技术由胶片向图像传感器的进化,极大的推动了摄像的普及。图像的载体由胶卷转变为计算机存储这也为计算器视觉的形成做了很重要的铺垫。

手机的相机结构

现代相机的结构大同小异,都是由支架+镜头+感光芯片+数电转化等组成。

感光芯片(CCD/CMOS) 主要关系图像的清晰度

镜头(LENS) 主要关系焦距和工作距离

02

工业相机

工业相机是一种特殊相机,它的结构原理与普通相机一致,一般工业相机具有方便集成,易于使用,稳定可靠的优点。我们案例中使用到的图片都由工业相机拍摄,也可以使用一般相机或者手机来拍照案例素材。简单介绍下我所使用的相机:

这是一个500W像素的工业相机,具体参数:

感兴趣的同学可以去某宝上搜索。注意:

  1. 一般工业相机的焦距都是可调的,改变焦距会改变当前对象的分辨率和相机的工作距离
  2. 此款的相机的分辨率越高,相机帧率越低

03

AFORGE介绍

本节案例选用的是C#支持的AFORGE.NET库,它可以支持我们简单的相机控制,图像处理。可以直接百度下载,也可以在文末点击蓝字“阅读原文”下载相关文档和资料。

下载完成后直接安装

在项目中引用相应的DLL,所有DLL都存放在你的安装目录下的Realase文件夹里面。

同时在工具中也添加对AFORGE的工具引用。

04

软体设计

目的:设计一个软件可以对相机进行操作,可以实现以下功能:

1. 可以甄别相机名称,并读取对应相机的视频流

2. 可以保存当前相机中的图片

软件界面设计

视频框使用的 AFORGE 的 videosourcePlay控件

图片框 使用的系统的Picturebox控件

单击开始,视频框开始实时读取相机图片

单击拍照,将图片保存到图片框中

简单的CV学习

05

代码

代码语言:javascript
复制
          //声明对象
        Bitmap bitmap; Bitmap bitmap1;
        System.Drawing.Image image;
        FilterInfoCollection videodevices;
        VideoCaptureDevice videodevice;
        VideoCapabilities[] videoCapabilities;
代码语言:javascript
复制
        //连接按钮
        private void button1_Click(object sender, EventArgs e)//单击连接按钮
        {
            if (videodevice!=null)
            {
                if (videoCapabilities!=null&&videoCapabilities.Length!=0)
                {
                    videodevice.VideoResolution = videoCapabilities[listBox2.SelectedIndex];//确定分辨率
                    videoSourcePlayer1.VideoSource = videodevice;//设备选定到视频框
                    videoSourcePlayer1.Start();//开始播放视频
                    changecontrolstatus(false);//改变控件状态
                }
            }
        }
代码语言:javascript
复制
        //拍照按钮
        private void button3_Click(object sender, EventArgs e)
        {
            bitmap = videoSourcePlayer1.GetCurrentVideoFrame();
            pictureBox1.Image = bitmap;
            //bitmap1 = bitmap.Clone(new Rectangle(new Point(0, 0), bitmap.Size), System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            //AForge.Imaging.Filters.Grayscale grayscale = new AForge.Imaging.Filters.Grayscale(0.11, 0.59, 0.3);
            //bitmap1= grayscale.Apply(bitmap1);
            //AForge.Imaging.Filters.CannyEdgeDetector cannyEdge = new AForge.Imaging.Filters.CannyEdgeDetector();
            //cannyEdge.ApplyInPlace(bitmap1);
            //pictureBox2.Image = bitmap1;
        }
代码语言:javascript
复制
//断开按钮
        private void button2_Click(object sender, EventArgs e)
        {
            DisConnect();
            changecontrolstatus(true);
        }
        private void DisConnect()
        {
            if (videoSourcePlayer1.VideoSource != null)
            {
                videoSourcePlayer1.SignalToStop();
                videoSourcePlayer1.WaitForStop();
                videoSourcePlayer1.VideoSource = null;
            }
        }

注意:

  1. 改变按钮状态时为了避免按钮冲突,比如未连接时,拍照按钮应该处于不可使用状态;
  2. 软件时序逻辑:查找可用设备>获取设备信息>设置当前设备>传输视频信息>断开;

小结

1. 相机的构成和原理

2. 利用AFORGE库 对相机进行简单的控制

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ROBOTEDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档