石鑫华视觉论坛

 找回密码
 注册会员
查看: 4443|回复: 0

[原创] 8位2D图像数组保存为图像(非NI VISION方法)

[复制链接]
  • TA的每日心情

    6 小时前
  • 签到天数: 3384 天

    连续签到: 6 天

    [LV.Master]2000FPS

    发表于 2017-12-30 14:34:51 | 显示全部楼层 |阅读模式 来自:广东省东莞市 电信

    注册登陆后可查看附件和大图,以及购买相关内容

    您需要 登录 才可以下载或查看,没有账号?注册会员

    x
    本帖最后由 石鑫华视觉 于 2017-12-30 15:22 编辑

    8位2D图像数组保存为图像(非NI VISION方法)
    在某些情况下,相机输出的图像可能只是一个二维数组,例如像大恒图像的水星USB2系列的相机,在LabVIEW中使用DLL调用时,输出的就是一个二维数组。又或者是某些情况下,我们通过IMAQdx GetImage Data VI函数获取了相机的原始数据,也是一个一维数组(可以转换为二维图像数组)。得到了这些图像数组后,更多的可能需要将其以图像形式保存到本地硬盘中。当然,比较简单的方法,是使用NI VISION中的Write写函数直接保存成图像。也相对比较方便。但是NI VISION是需要授权许可的(不清楚File文件是不是需要授权,部分简单函数可能不需要授权,没有具体验证过)。所以,我们还有没有其它的方法,可以不使用NI VISION中的写函数来保存图像吗?方法当然还是有的,就是使用LabVIEW平台本身的图形格式函数:

    图形格式函数中的可用函数

    图形格式函数中的可用函数
    图形格式函数中的可用函数
    在编程>图形与声音>图形格式选板中,有写入JPEG文件、写入PNG文件、写入BMP文件,读取JPEG文件、读取PNG文件、读取BMP文件等几组读写图像文件的函数,另外还有一个平化像素图像、还原像素图的函数。这个就是将二维图像数组转换为图像数据的功能函数,或者是将图像数据转换为二维数组的函数。而读写功能中,是使用JPEG、PNG还是BMP,则需要自己考虑,JPEG压缩比较大,图像质量较差,但是图像小,占用硬盘空间少;PNG在图像质量和图像大小之间有一个比较折中的取值,有一定的压缩,但是不是很严重;BMP则是不压缩的,图像大小则最大。

    8位2D图像数组保存为图像前面板

    8位2D图像数组保存为图像前面板
    8位2D图像数组保存为图像前面板

    8位2D图像数组保存为图像-8位灰度图像程序框图

    8位2D图像数组保存为图像-8位灰度图像程序框图
    8位2D图像数组保存为图像-8位灰度图像程序框图

    8位2D图像数组保存为图像-24位或32位彩色图像程序框图

    8位2D图像数组保存为图像-24位或32位彩色图像程序框图
    8位2D图像数组保存为图像-24位或32位彩色图像程序框图
    在本例子中,我们使用了平化像素图像函数:

    平化像素图函数

    平化像素图函数
    平化像素图函数
        这个函数在转换彩色图像时,该函数可以转换1位像素图、4位像素图、8位像素图(灰度图)、24位像素图(RGB彩色图像)。一般常用的是8位灰度图和24位彩色图像。如果是彩色图像,直接输入24位像素图的二维数组即可(32位的彩色图像,是加了一个Alpha透明通道,在LabVIEW中是不怎么支持透明通道的),其它的颜色、掩码、左上角参数都不需要理会。而如果是转换8位的灰度图像,则需要提供颜色参数,这里的颜色参数官方说明为“颜色是RGB颜色的数组,与连接至像素图的值对应。连接的像素图可确定LabVIEW如何读取输入的值。 如连接数据至24位像素图,LabVIEW可忽略该输入。如连接数据至8位像素图,数组有256个元素。如连接数据至4位像素图,数组有16个元素。如连接数据至1位像素图,数组有2个元素。如除24位像素外,颜色数组为空,则图形使用默认的LabVIEW颜色选板。”这个参数,其实就是一个调色板,作用就是如何转换图像数据。如果是24位时,可以使用内部默认的调色板,直接转换即可。而如果是8位的灰度图像,则需要指定相应的调色板。可以通过读取PNG文件函数,来读一张灰度图像,而获取相应的调色板值。当然也可以自己构造这个调色板。8位灰度图像时,共有256个元素,每个元素使用一个颜色值为表示,这个颜色值可以使用RGB转换为颜色值的方式获取,即十六进制表示的xAABBCC形式的值,AA表示的是红色值的转换方式(0-255,十六进制为0-FF),BB表示的是绿色值的转换方式,CC表示的是蓝色值的转换方式。一般来讲,灰度图像中的0,其AA、BB、CC都使用0来表示,灰度图像中的128,则AA、BB、CC都使用128来表示,即通常的AA、BB、CC是相等的,且等于灰度图像中的原始值。当然也可以使用其它的一些查找表,例如将10以下的灰度值,其RGB都表示成0,250以上的灰度值,则都表示为255。RGB值与颜色值的转换可以使用NI VISION中的函数IMAQ ColorValueToInteger(需要安装NI VISION模块,如果没有安装则没有该函数),也可以使用LabVIEW中的函数RGB至颜色转换(在编程>图形与声音>图片函数选板中,LabVIEW安装时自带该函数):

    R=0,G=0,B=0,颜色为为x000000

    R=0,G=0,B=0,颜色为为x000000
    image6.png
    R=0,G=0,B=0,颜色为为x000000

    R=128,G=128,B=128,颜色为为x808080

    R=128,G=128,B=128,颜色为为x808080
    image7.png
    R=128,G=128,B=128,颜色为为x808080

    R=255,G=255,B=255,颜色为为xFFFFFF

    R=255,G=255,B=255,颜色为为xFFFFFF
    image8.png
    R=255,G=255,B=255,颜色为为xFFFFFF
        也可以利用这个函数生成一个数组,从而得到一个调色板,或者是通过读的方式直接得到一个灰度图像的调色板颜色。
    只要将像素图平化为图像数据后,后面再加一个写图像文件函数即可。一般使用默认值,即直接连接到图像数据接线端即可。路径可以不用填,压缩也可以使用默认值。

    如果8位灰度图像不连接颜色,则出错

    如果8位灰度图像不连接颜色,则出错
    如果8位灰度图像不连接颜色,则出错
    如果保存灰度图像时,不连接颜色接线端,则数据类型无效,会提示错误。而这里的错误提示,其实是不清不楚的,一般来看不出哪里有问题。

    正常保存后的8位灰图像及属性

    正常保存后的8位灰图像及属性
    正常保存后的8位灰图像及属性
    以上就是直接使用LabVIEW平台中的写图像函数来保存二维图像数组数据的方法。其它JPEG、BMP格式的方法与此类似,自己修改即可。

    示例下载:LabvIEW2017
    8位2D图像数组保存为图像.vi (3.99 MB, 下载次数: 36)

    RGB转为颜色值.vi (7.73 KB, 下载次数: 75)
    RGB转为颜色值-LabVIEW自带函数.vi (7.14 KB, 下载次数: 28)


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    LabVIEW HALCON图像处理入门教程(24.09)
    石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
    《LabVIEW Vision函数实例详解2020-2024》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24

    QQ|石鑫华视觉论坛 |网站地图

    GMT+8, 2024-11-22 14:32

    Powered by Discuz! X3.4

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表