【写在前面:
不是我高冷啊,我不知道为啥文章里看不到评论也没法回复,有小伙伴给我私信,隔了一年才给我推送。。。
我的程序也在大学本科毕业后就丢失了,所以本人没有程序,但是按照我的截图应该可以复现的,没有特别需要设置的地方。如果是做机器视觉的,强烈推荐使用labview自带的vision assistant, 各种图像处理功能一应俱全,还可以自动生成vi文件,这个vi还可以插入到自己其他项目里。。】
编写LabVIEW打开摄像头,采集图像的程序
打开图像采集函数子选板,选择NI-IMAQ,使用其中的子VI:
IMAQ Create:
创建图像,此VI在Vision Utilities的Image Management 函数子选板中,主要参数有:
Border Size(边界大小):许多图像处理函数进行像素处理是要参考相邻像素的值,但是一幅图像边界上的像素并非四周都有相邻像素,这就要给图像加一个边界。这里指定了边界的像素数,而像素的值取决于使用的图像处理函数。
Image Name(图像名):任意字符串。
Image Type(图像类型):因为采集彩色图像,选择U32。
New Image(新图像):输出所建图像的引用句柄。
IMAQdx Open Camera VI:
打开相机,查询摄像头的功能,加载摄像头的配置文件,并能创建一个相机。完成后调用IMAQdx Close Camera VI。
IMAQdx Close Camera VI:
停止图像获取,释放获取图像所占用的资源并关闭相机。
IMAQdx Grab VI:
获取输出图像的当前帧。在调用IMAQdx Configure Grab VI之后才调用此VI。如果图像类型与摄像头的视频格式不匹配,该VI将其转换到一个合适的图像类型格式。
IMAQdx Configure Grab VI:
配置和开始采集图像。调用IMAQdx Grab VI在缓冲区高速循环采集图像并复制图像。若在调用IMAQdx Open Camera VI之前调用此VI,则IMAQdx Configure Grab VI默认情况下使用cam0。调用IMAQdx Unconfigure Acquisition VI取消获取图像的配置。
IMAQdx Snap VI:
配置,启动,获取和取消配置单元采集。在便于编程的应用场合中使用低速或单捕获是必不可少的部分。如果你调用这个VI之前调用IMAQdx Open Camera VI,IMAQdx Snap VI默认情况下,使用cam0。如果图像类型与摄像头的视频格式不匹配,该VI将其转换到一个合适的图像类型格式。
IMAQ Dispose VI:
删除一个图像并释放它在内存中占据的空间。为释放分配给IMAQ Create VI的内存,在应用程序中创建的每个映像都需要这个VI。仅在应用程序中不再需要映像时执行IMAQ Dispose。既可以为每次调用IMAQ Create使用IMAQ Dispose,也可以为使用IMAQ Create创建的所有图像使用一次。
使用while循环结构使图像采集程序连续运行,只有当出错或按下停止按钮时,循环停止,采集程序终止,关闭摄像头,清除图像缓存。
while循环结构也叫条件循环结构,是一种无限循环结构,只要条件满足,它就一直循环运行下去。
程序框图:
前面板:
cam 0默认为计算机自带摄像头。
拍照:
在前面板上增加一个拍照按钮,在按下拍照按钮时,负责采集图像的程序启动,拍下一张照片,并显示到前面板,拍照功能通过Case结构实现,按钮在默认情况下,是0,按下时为1,松开又恢复为0.当为1时图像采集程序启动拍照,即按一次按钮拍一张照片。
LabVIEW的条件结构相当于C语言中的
if(表达式){……}
else{……}
和switch结构:
switch(表达式)
{case值1:语句1break;
case值2:语句2break;
…
default:语句nbreak;},用于实现分支选择程序逻辑。
该设计有两个Case,即1和0,当输入值为1(真)时,即按下拍照按钮,拍照程序运行,否则,不运行拍照程序。