Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【简单的CV】1.5 相机控制

【简单的CV】1.5 相机控制

作者头像
EdenChen
发布于 2019-11-06 05:32:33
发布于 2019-11-06 05:32:33
1K00
代码可运行
举报
文章被收录于专栏:ROBOTEDUROBOTEDU
运行总次数:0
代码可运行

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
代码运行次数:0
运行
AI代码解释
复制
          //声明对象
        Bitmap bitmap; Bitmap bitmap1;
        System.Drawing.Image image;
        FilterInfoCollection videodevices;
        VideoCaptureDevice videodevice;
        VideoCapabilities[] videoCapabilities;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        //连接按钮
        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
代码运行次数:0
运行
AI代码解释
复制
        //拍照按钮
        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
代码运行次数:0
运行
AI代码解释
复制
//断开按钮
        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 条评论
热度
最新
推荐阅读
编辑精选文章
换一批
c# 利用AForge.NET组件操作摄像头
private FilterInfoCollection videoDevices;
用户5640963
2019/07/26
1.6K0
摄像头拍照功能是怎样实现的?自己动手做一个!
现如今,拍照已经融入我们的日常生活中了。我们在日常的工作生活中很多场景都会用到拍照功能。比如在登录网页或者设备时,密码错误进行拍照,防止被盗。日常进行图像识别或者图像处理前的图像获取。都需要用到我们的摄像头进行图像的获取。
跋扈洋
2021/07/19
9000
调用打印机拍照的工具类
using AForge.Controls; using AForge.Video; using AForge.Video.DirectShow; using Desktop.Protocol.Models.WhCommModels; using Destop.Infrastucture.Helper.Log; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System
kiki.
2022/09/29
4590
使用 AForge.NET 做视频采集
AForge.NET 是基于C#设计的,在计算机视觉和人工智能方向拥有很强大功能的框架。btw... it's an open source framework. 附上官网地址: http://www.aforgenet.com/aforge/framework/ 。 今天要介绍的是AForge中的视频采集功能,这里的视频包括从摄像头等设备的输入和从视频文件的输入。 首先来认识一下 视频源播放器:VideoSourcePlayer,从摄像头和文件输入的视频,都会通过它来播放,并按帧(Frame)来输出Bit
Shao Meng
2018/04/28
2.2K0
Windows Forms:在C#中将图像转换成灰度图
本文翻译自Windows Forms: Convert an image into grayscale in C# 这篇文章向你展示在C# Windows窗体应用程序中如何将图像转换成灰度图。 创建一个新的Windows窗体应用程序项目,然后创建一个允许你可以打开图像,然后将图像转换成黑白图像的简单的UI,如下图所示:
ccf19881030
2021/03/02
1.7K0
Windows Forms:在C#中将图像转换成灰度图
【愚公系列】2023年12月 GDI+绘图专题 图形图像编程基础
本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础、C#图像处理基础以及简单的图像处理技术。
愚公搬代码
2023/12/22
1K0
太神奇了!使用C#实现自动核验健康码:(1)二维码识别
但是,单靠人工核验健康码容易造成人员拥堵,增加病毒交叉感染的风险,其实完全可以使用计算机来实现自动核验。
zls365
2021/09/02
2.6K0
太神奇了!使用C#实现自动核验健康码:(1)二维码识别
工业相机与镜头选型方法(含实例)
工业相机与我们手机上面的相机或者我们单反相机不同,工业相机它能够使用各种恶劣的工作环境,比如说高温,高压,高尘等。工业相机主要有面阵相机和线阵相机,线阵相机主要用于检测精度要求很高,运动速度很快的场景,而面阵相机应用更为广泛。
全栈程序员站长
2022/08/30
2.7K0
工业相机与镜头选型方法(含实例)
机器视觉系统之——镜头、相机介绍
1).分辨率(Resolution):相机每次采集图像的像素点数(Piels),对于数字工业相机机一般是直接与光电传感器的像元数对应的,对于模拟相机机则是取决于视频制式,PAL制为768*576,NTSC制为640*480。
AI机器视觉
2022/06/01
1.6K0
机器视觉系统之——镜头、相机介绍
一文详解工业相机和镜头选取
一问价格,至少都是大几千,贵的在十几万,心里就不禁有疑问,就这么一个破相机,为啥就卖这么贵?它跟我们常见的单反相机有什么区别?我用单反相机来拍,色彩又好,成像又清晰,它不香吗?为啥一定要用工业相机?
3D视觉工坊
2020/12/11
1.5K0
一文详解工业相机和镜头选取
【相机标定系列】相机sensor传感器尺寸,CMOS靶面尺寸,分辨​率​和​镜头​焦距,畸变处理效果,相机主点
https://blog.csdn.net/j_shui/article/details/77262947 https://www.ni.com/zh-cn/support/documentation/supplemental/18/calculating-camera-sensor-resolution-and-lens-focal-length.html#section-489585536
全栈程序员站长
2022/09/05
2.1K0
【相机标定系列】相机sensor传感器尺寸,CMOS靶面尺寸,分辨​率​和​镜头​焦距,畸变处理效果,相机主点
机器视觉工业缺陷检测(光源,相机,镜头,算法)
视觉工业检测大体分为工件尺寸测量与定位,和表面缺陷检测,及各种Logo标识的检测与识别等。
机器学习AI算法工程
2021/10/14
18.3K0
机器视觉工业缺陷检测(光源,相机,镜头,算法)
(干货) |机器视觉不可不知的相机内部工作原理
工业相机是机器视觉系统中的一个关键组件,其最本质的功能就是将光信号转变成有序的电信号。选择合适的相机也是机器视觉系统设计中的重要环节,相机的选择不仅直接决定所采集到的图像分辨率、图像质量等,同时也与整个系统的运行模式直接相关。 一. 相机的芯片类型: 一般情况下,工业相机按照芯片类型可以分为CCD相机和CMOS相机,当然也有一些其他的芯片,比如富士公司生产的Super CCD芯片。这里我们只讨论市场主流的CCD相机和CMOS相机的工作原理。数码相机的CCD和CMOS都深藏于相机内部,就算您有机会看到它们的样
智能算法
2018/04/03
2.6K0
(干货) |机器视觉不可不知的相机内部工作原理
机器视觉(第4期)----工业相机综述及接口介绍
上期我们一起学习了镜头的相关知识,戳下链接: 机器视觉(第3期)----图像采集之镜头原理详述 这期我们一起学习相机和接口的相关知识,工业相机是机器视觉系统中的一个关键组件,其最本质的功能就是将光信号转变成有序的电信号。选择合适的相机也是机器视觉系统设计中的重要环节,相机的选择不仅直接决定所采集到的图像分辨率、图像质量等,同时也与整个系统的运行模式直接相关。 本期主要内容: 相机的芯片类型 黑白相机成像原理 彩色相机成像原理 相机接口类型 线阵和面阵相机 相机常见参数介绍 一. 相机的芯片类型 一般情况下,
智能算法
2018/04/03
1.6K0
机器视觉(第4期)----工业相机综述及接口介绍
c#实战教程_ps初学者入门视频
大家好,又见面了,我是你们的朋友全栈君。 C#基础教程-c#实例教程,适合初学者。 第一章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠一章的内容就完全掌握C#语言是不可能的,如需进一步学习C#语言,还需要认真阅读有关C#语言的专著。 1.1 C#语言特点 Microsoft.NET(以下简称.NET)框架是微软提出的新一代Web软件开发模型,C#语言是.NET框架中新一代的开发工具。C#语言是一种现代、面向对象的语言,它简化了C++语言在类、命名空间、方法重载和异常处理等方面的操作,它摒弃了C++的复杂性,更易使用,更少出错。它使用组件编程,和VB一样容易使用。C#语法和C++和JAVA语法非常相似,如果读者用过C++和JAVA,学习C#语言应是比较轻松的。 用C#语言编写的源程序,必须用C#语言编译器将C#源程序编译为中间语言(MicroSoft Intermediate Language,MSIL)代码,形成扩展名为exe或dll文件。中间语言代码不是CPU可执行的机器码,在程序运行时,必须由通用语言运行环境(Common Language Runtime,CLR)中的既时编译器(JUST IN Time,JIT)将中间语言代码翻译为CPU可执行的机器码,由CPU执行。CLR为C#语言中间语言代码运行提供了一种运行时环境,C#语言的CLR和JAVA语言的虚拟机类似。这种执行方法使运行速度变慢,但带来其它一些好处,主要有:  通用语言规范(Common Language Specification,CLS):.NET系统包括如下语言:C#、C++、VB、J#,他们都遵守通用语言规范。任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,由CLR负责执行。只要为其它操作系统编制相应的CLR,中间语言代码也可在其它系统中运行。  自动内存管理:CLR内建垃圾收集器,当变量实例的生命周期结束时,垃圾收集器负责收回不被使用的实例占用的内存空间。不必象C和C++语言,用语句在堆中建立的实例,必须用语句释放实例占用的内存空间。也就是说,CLR具有自动内存管理功能。  交叉语言处理:由于任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,不同语言设计的组件,可以互相通用,可以从其它语言定义的类派生出本语言的新类。由于中间语言代码由CLR负责执行,因此异常处理方法是一致的,这在调试一种语言调用另一种语言的子程序时,显得特别方便。  增加安全:C#语言不支持指针,一切对内存的访问都必须通过对象的引用变量来实现,只允许访问内存中允许访问的部分,这就防止病毒程序使用非法指针访问私有成员。也避免指针的误操作产生的错误。CLR执行中间语言代码前,要对中间语言代码的安全性,完整性进行验证,防止病毒对中间语言代码的修改。  版本支持:系统中的组件或动态联接库可能要升级,由于这些组件或动态联接库都要在注册表中注册,由此可能带来一系列问题,例如,安装新程序时自动安装新组件替换旧组件,有可能使某些必须使用旧组件才可以运行的程序,使用新组件运行不了。在.NET中这些组件或动态联接库不必在注册表中注册,每个程序都可以使用自带的组件或动态联接库,只要把这些组件或动态联接库放到运行程序所在文件夹的子文件夹bin中,运行程序就自动使用在bin文件夹中的组件或动态联接库。由于不需要在注册表中注册,软件的安装也变得容易了,一般将运行程序及库文件拷贝到指定文件夹中就可以了。  完全面向对象:不象C++语言,即支持面向过程程序设计,又支持面向对象程序设计,C#语言是完全面向对象的,在C#中不再存在全局函数、全局变量,所有的函数、变量和常量都必须定义在类中,避免了命名冲突。C#语言不支持多重继承。 1.2 编写控制台应用程序 使用SDK命令行工具编写控制台程序 第一个程序总是非常简单的,程序首先让用户通过键盘输入自己的名字,然后程序在屏幕上打印一条欢迎信息。程序的代码是这样的: using System;//导入命名空间。//为C#语言新增解释方法,解释到本行结束 class Welcome//类定义,类的概念见下一节 { /*解释开始,和C语言解释用法相同 解释结束*/ static void Main()//主程序,程序入口函数,必须在一个类中定义 { Console.WriteLine(“请键入你的姓名:”);//控制台输出字符串 Console.ReadLine();//从键盘读入数据,输入回车结束 Console.WriteLine(“欢迎!”); } } 可以用任意一种文本编辑软件完成上述代码的编写,然后把文件存盘,假设文件名叫做welcome.c
全栈程序员站长
2022/09/30
15.8K0
WPF中UI元素跨线程访问
dotnet中线程资源独占UI元素,不能跨线程访问,可以通过Dispatcher.Invoke的方式调用,但实际处理还是UI线程中,任务量比较大的数据会增加线程的处理压力。 其实还有一种做法,可以通过设置UI元素为只读的方式,跨线程访问。 如BitmapSource跨线程访问,可以调用Freeze设置元素为只读模式。 Aforge.net跨线程传递图像资源,如下:
sofu456
2019/07/09
1.1K0
Emgucv视频操作--进阶1
实现功能: 播放视频 提取每一帧图片并保存 显示视频播放的时间 videowrite 视频保存的方法还未调试成功,等待后续再继续研究! //---------------------------------------------------------------------------- // Copyright (C) 2004-2019 by EMGU Corporation. All rights reserved. //----------------------------
zls365
2020/08/19
1.4K0
Emgucv视频操作--进阶1
PictureForm.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Drawing.Imaging; using Packet; namespace TSProducer { pu
静默虚空
2022/05/07
1870
全志科技T3开发板(4核ARM Cortex-A7)——视频开发案例
本文主要介绍基于全志科技T3国产平台的视频开发案例,内容包含了gige_capture案例、案例、GigE工业相机配置、图像采集并显示、图像采集以及案例编译保存、关键代码等。
创龙科技Tronlong
2022/06/07
8370
全志科技T3开发板(4核ARM Cortex-A7)——视频开发案例
机器视觉系统之——工业相机介绍
工业相机是机器视觉系统中的一个关键组件,其最基础功能就是将光信号转变成为有序的电信号。选择合适的工业相机也是机器视觉系统设计中的重要环节,工业相机不仅是直接决定所采集到的图像分辨率、图像质量等,同时也与整个系统的运行模式直接相关。
AI机器视觉
2022/06/01
1.8K0
机器视觉系统之——工业相机介绍
相关推荐
c# 利用AForge.NET组件操作摄像头
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验