1.5 相机控制
01
相机介绍
相机是利用光学成像的原理进行记录摄像的设备。
小孔成像原理和照相机原理
传统底片式相机结构
数码相机结构
相机技术由胶片向图像传感器的进化,极大的推动了摄像的普及。图像的载体由胶卷转变为计算机存储这也为计算器视觉的形成做了很重要的铺垫。
手机的相机结构
现代相机的结构大同小异,都是由支架+镜头+感光芯片+数电转化等组成。
感光芯片(CCD/CMOS) 主要关系图像的清晰度
镜头(LENS) 主要关系焦距和工作距离
02
工业相机
工业相机是一种特殊相机,它的结构原理与普通相机一致,一般工业相机具有方便集成,易于使用,稳定可靠的优点。我们案例中使用到的图片都由工业相机拍摄,也可以使用一般相机或者手机来拍照案例素材。简单介绍下我所使用的相机:
这是一个500W像素的工业相机,具体参数:
感兴趣的同学可以去某宝上搜索。注意:
03
AFORGE介绍
本节案例选用的是C#支持的AFORGE.NET库,它可以支持我们简单的相机控制,图像处理。可以直接百度下载,也可以在文末点击蓝字“阅读原文”下载相关文档和资料。
下载完成后直接安装
在项目中引用相应的DLL,所有DLL都存放在你的安装目录下的Realase文件夹里面。
同时在工具中也添加对AFORGE的工具引用。
04
软体设计
目的:设计一个软件可以对相机进行操作,可以实现以下功能:
1. 可以甄别相机名称,并读取对应相机的视频流
2. 可以保存当前相机中的图片
软件界面设计
视频框使用的 AFORGE 的 videosourcePlay控件
图片框 使用的系统的Picturebox控件
单击开始,视频框开始实时读取相机图片
单击拍照,将图片保存到图片框中
简单的CV学习
05
代码
//声明对象
Bitmap bitmap; Bitmap bitmap1;
System.Drawing.Image image;
FilterInfoCollection videodevices;
VideoCaptureDevice videodevice;
VideoCapabilities[] videoCapabilities;
//连接按钮
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);//改变控件状态
}
}
}
//拍照按钮
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;
}
//断开按钮
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. 利用AFORGE库 对相机进行简单的控制