HALCON-从入门到入门-图像格式的互相转换

1.废话

上次说到了图片的读取和写入到本地,这次说一下图片的格式相关。

位图和矢量图

photoshop处理出来的图片肯定叫做图片,那么coreDraw处理出来的图片是不是也叫图片。

之间就有区分,一种叫做位图,一种叫做矢量图

位图和矢量图在定义、分辨率、色彩丰富度、文件大小和绘制工具等方面存在显著差异。选择使用哪种类型的图像取决于具体的应用场景和需求。例如,如果需要制作色彩丰富、逼真的自然景象或照片,位图是更好的选择;而如果需要制作可无限放大且不失真的Logo、图标或图形设计,矢量图则更为合适。

  • 位图
    • 也称为点阵图像或栅格图像,由像素(图片元素)的单个点组成。
    • 每个像素点都有特定的位置和颜色信息。
    • 存储原理是将图片的每一个像素点的颜色保存起来。
    • 与分辨率紧密相关,分辨率越高,图像越清晰。
    • 放大图像时,像素点也会放大,导致图像出现马赛克状,即失真现象。
    • 色彩丰富,能够制作出色彩和亮度变化丰富的图像。
    • 可以逼真地表现自然界各类实物。
  • 矢量图
    • 也称为面向对象的图像或绘图图像,在数学上定义为一系列由点连接的线。
    • 矢量文件中的图形元素称为对象,每个对象都是一个自成一体的实体,具有颜色、形状、轮廓、大小和屏幕位置等属性。
    • 存储原理是使用一系列数学方程表示图片中的线条,再另外保存每个区域的颜色信息。
    • 与分辨率无关,可以无限放大而不失真。
    • 无论放大、缩小或旋转,都保持清晰度和图像质量。
    • 色彩相对不丰富,难以表现色彩层次丰富的逼真图像效果。
    • 常用于表示标识、图标、Logo等简单直接的图像。

我们处理的当然是位图,至于矢量图我们是不关心的,这里只是作为图像概念的扩充。


图像在硬盘中保存的时候有多种格式,比如说jpg,png这种

那么硬盘上的图像文件主要的经常用到的格式有哪些呢

  1. BMP格式
    • 全称:BitMaP
    • 与硬件设备无关的图像文件格式
    • 使用位映射存储格式,不采用其他任何压缩,因此文件占用空间较大
    • 图像深度可选lbit、4bit、8bit及24bit
    • Windows环境中运行的图形图像软件都支持BMP图像格式
  2. JPEG格式
    • 全称:Joint Photographic Experts Group
    • 俗称:JPG
    • 一种有损压缩格式
    • 优点:图像压缩在很小的储存空间,适合网络传输
    • 缺点:图像中重复或不重要的资料会被丢失,容易造成图像数据的损伤
  3. PNG格式
    • 全称:Portable Network Graphics
    • 优点:提供无损压缩图像文件,长度比GIF小30%
    • 支持24位和48位真彩色图像
    • 支持透明背景和变显图像
  4. GIF格式
    • 全称:Graphics Interchange Format
    • 优点:支持透明背景和动画
    • 只支持256色
    • 压缩率一般在50%左右
  5. TIFF格式
    • 全称:Tagged Image File Format
    • 优点:无损压缩,2-3倍的压缩比
  6. RAW格式
    • 未经处理直接从CCD或CMOS上所得到的原始图像信息
    • 文件超大,但特别适合后期出片调整

此外,还有其他一些格式如PSD(Photoshop的源文件格式)、AI(Adobe Illustrator的文件格式)、EPS(封装的PostScript文件)等,这些格式通常用于专业的图形设计和编辑软件。

在halcon中的图像格式有哪些呢?

当我们读取一张图片进来的时候,我们按照彩色和黑白分,有通道数的概念。

三通道的可以表示彩色图像,单通道的只能是黑白图像。

举个例子:

我们读取了一张图像,这张图像在硬盘中是jpg格式,那么读取到halcon中,看得出来是带颜色的,旁边有棕色的桌面。

我们把鼠标指向变量窗口看一下。

出来一个框,看起来这张图的通道数是3

也就是说这是一张三通道的图,不难理解,这个三个通道应该就是RGB三通道。

这张图的类型是byte,什么意思呢,就是每个通道的像素的灰度值,取值范围是0-255。

用byte 一个字节表示,8bit表示,换算到十进制就是0-255.

在halcon中除了常用的byte格式之外,还有real格式(灰度值取值范围类似于float)

uint2格式,灰度值取值范围为0-65535

同理,int2格式的取值范围为-32768-32767

halcon中图像像素灰度值的存储内存不同,格式不同,一共如上图所示。

2.彩色图像转黑白图像

跟着我们上面的步骤,我们读进来一张三通道的图,那么我们把通道给分开

把每个通道给分出来,使用下面的算子

decompose3 (Image2, Image1, Image21, Image3)

将一张三通道的图片分成三张单通道的图片,合理

目前三张都是黑白的图片了。

那假如说我现在手里有三张黑白的图片 byte类型的,我想合成一张彩色的图像怎么做的

下面这个算子

compose3 (Image1, Image1, Image1, MultiChannelImage)

这两个算子还有很多类似的算子

不光可以拆分或者合并三通道的,若干通道的都行。

为什么我们要拆分彩色图片呢,因为多通道图片多了一个通道维度,很多时候不好处理,很多算子对应的目标都是单通道图片,所以我们就拆分通道分别处理。

彩色转黑白图

不想拆分通道,简单点,之间将彩色图转黑白,使用下面算子


rgb1_to_gray (Image2, GrayImage)

这个算子就是将三个通道的值按照一定比例相乘相加得到新图片的灰度值(单通道的)

具体比例系数是

好的,处理完彩色图像之后如下图所示

3.byte转real

0-255对于我来说不够用,我想要每个像素的灰度值表示为小数

这时候就需要用到我们的real格式

转图像合适的算子如下:

convert_image_type (GrayImage, ImageConverted, 'real')

在转换的时候记得注意,如果是小转大:

        比如说byte转real,那么直接转,不会丢失精度;

        如果说是real转byte,大于255的灰度值会变为255,灰度值为小数的会忽略掉后面的小数。

这个需要注意,以免出现图像处理异常。

转换之后我们得到了real格式的图像。

同理,其他格式也是这么转换过来的,不同的格式适用于不同的计算场景。

常规的机器视觉,byte类型图像完全够用,设计到3d视觉,需要用到深度图的,那么uint2格式的深度图能够更加适合。

4.叮嘱

另外如果是特殊格式需要保存到本地的话,建议都用tiff格式,其他格式可能会出现意想不到的问题。

比如我现在有一张5通道的图片,前三个通道的颜色信息,第四个通道是法向量信息,第五个通道是高度信息,那么我将这张图存成bmp格式就会出现问题。

另外png格式理论上来说可以保存单通道的图像,也可以保存4个通道的图像,第四个通道是透明度通道,因为png格式图片允许其中某些像素是透明的,而bmp格式就不允许了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/671527.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32作业实现(四)光敏传感器

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

曝光超1.5亿,迪丽热巴“抖音直播首秀”解锁德施曼智能锁科技革命

作为中国电商行业年中最大的消费狂欢节点,今年的618大促热闹依旧;各大品牌在今年极简的现货模式下展开了周期最长的品牌实力比拼。其中,高端智能锁领军品牌德施曼在618大促期间,携手代言人迪丽热巴,再次掀起智能锁消费…

【前端】Vuex笔记(超详细!!)

最近花了两周时间,完完全全的跟着Vuex官方的视频学完了Vuex并且详详细细的做了笔记,其中总结部分是我对于整个视频课程的总结,视频部分是跟着视频做的笔记,如果总结部分有不懂的话,直接去视频部分查找对应的笔记即可&a…

Codeforces Round 548 (Div. 2) C. Edgy Trees

Edgy Trees time limit per test: 2 second memory limit per test: 256 megabytes input: standard input output: standard output You are given a tree (a connected undirected graph without cycles) of n n n vertices. Each of the n − 1 n - 1 n−1 edges of the t…

计算机毕业设计 | SpringBoot招投标系统 任务发布网站(附源码)

1,绪论 在市场范围内,任务发布网站很受欢迎,有很多开发者以及其他领域的牛人,更倾向于选择工作时间、工作场景更自由的零工市场寻求零散单子来补贴家用。 如今市场上,任务发布网站鱼龙混杂,用户需要找一个…

【TCP协议中104解析】wireshark抓取流量包工具,群殴协议解析基础

Tcp ,104 ,wireshark工具进行解析 IEC104 是用于监控和诊断工业控制网络的一种标准,而 Wireshark则是一款常用的网络协议分析工具,可以用干解析TEC104 报文。本文将介绍如何使用 Wireshark解析 IEC104报文,以及解析过 程中的注意事项。 一、安…

STL-queue的使用及其模拟实现

在C标准库中,队列(queue)是一种容器适配器,它以先进先出的方式组织数据,其中从容器一端插入元素,另一端取出元素。 queue的使用 queue的构造函数 queue的成员函数 empty:检测队列是否为空size:返回队列中有…

7-14 字节序(Endianness)---PTA实验C++

一、题目描述 “内存寻址的最小单位是字节”——明白。 “每个字节有唯一的编号,称为地址”——明白。 “C中int通常为四个字节”——了解。 “int x 1;最低字节是1还是0?——纳尼? 事实上,这里有点小小分歧: 多字…

C++对C的增强

1、作用域运算符 ::解决归属问题(谁是谁的谁) 可以优先使用全局变量 2、命名空间 使用关键字namespace,控制标名称的作用域。 命名空间的本质:对符号常量、变量、函数、结构、枚举、类和对象等等进行封装 1、创建一个命名空间…

学习小记录——python函数的定义和调用

今日小好运,未来有好运。🎁💖🫔 分享个人学习的小小心意,一起来看看吧 函数的定义 函数通常来说就是带名字的代码块,用于完成具体的工作,需要使用的时候调用即可,这不仅提高代码的…

我的创作纪念日-砥砺前行

机缘 大家好,我是诊断协议那些事儿,又和大家见面了,记录一下创作日记,转眼间已经在CSDN平台创作三年了,最初仅仅是为了记录学习过程中的笔记,后来慢慢转为项目实践中的经验分享,当然更多的希望…

dm8 什么时候视图中统计的内存会超过OS

v$bufferpool和v$mem_pool视图记录着DMSERVER各组件的内存占用量。理论上跟OS看到的保持一致。但实际大多数场景下,OS中看到的数据远大于视图中的统计。这里面可能有内存泄漏的原因。不过也有的时候视图中的统计数据超过OS。下面就是这种情况: 上图中红线…

nas连接萤石云摄像机CTQ6X

需要准备的nassurveillance 请参考这个大佬的流程 https://www.bilibili.com/video/BV1ri4y1g7EN/ 踩坑: 一直到添加录像机验证一直没问题,但是验证一直不通过,后面下载了萤石云工作室的win桌面客户端,不知道是不是设置了预览还…

【Ubuntu】【Shell】执行sh脚本报错“xxx.sh:/bin/bash^M:解释器错误: 没有那个文件或目录“

背景 在自己Ubuntu环境执行sh脚本,报错"xxx.sh:/bin/bash^M:解释器错误: 没有那个文件或目录",查了下是Ubuntu系统默认的shell是dash: 修改配置过下,变成bash 解决方案 在终端执行: sudo dp…

云队友:专业的远程工作和程序员接单平台,用户体验佳

编程赚钱的平台有不少,良莠不齐,今天给大家分享个专业的远程工作平台,以技术类工作为主(包括编程): 云队友简介 外包大师是PMCAFF互联网产品社区于2016年推出的互联网产品技术外包服务平台。外包大师最新…

MyBatis 核心配置文件详细内容详解

1. MyBatis 核心配置文件详细内容详解 文章目录 1. MyBatis 核心配置文件详细内容详解2. 测试和学习的准备工作3. environment 标签4. transactionManager 标签5. dataSource 标签6. properties 标签7. mapper 标签8. 总结:9. 最后: 关于 MyBatis 这个核…

攻防世界---misc---2017_Dating_in_Singapore

1、题目描述 2、下载附件是一个pdf,里面是一个日历 3、题目描述是一些数字,直觉猜测是和日历的日期有关,仔细看题目的描述,会发现有个-连接,拆开之后发现一共有12组数据,再连联系到十二个月份,再…

音视频开发—FFmpeg播放YUV文件,YUV转换为JPEG操作

文章目录 1.使用命令行播放YUV数据1.1命令解析1.2参数说明 2.使用C语言实现将YUV数据转为JPEG图片格式2.1需求分析2.2读取YUV源文件2.3将YUV数据封装为AVFrame2.4将NV12 转换为YUV420平面格式2.5初始化MJPEG编码器2.6将YUV420P编码为JPEG2.7将编码数据写入图片文件2.8完整代码 …

从零开始实现自己的串口调试助手(4) -实现自动发送 / 时间显示

实现自动发送:checkBox 添加bool槽函数 bool 值&#xff0c;当√的时候为true 取消√ 位false 实现带bool 类型的槽函数: void Widget::on_checkBox_SendInTime_clicked(bool checked) {qDebug()<<"checkStatus:"<<checked;if(checked){ // 被勾选了//…

Python语言进阶学习

目录 一、类、对象和成员方法 二、构造方法 三、面向对象 &#xff08;1&#xff09;封装 &#xff08;2&#xff09;继承 单继承 多继承 复写 super&#xff1a;调用父类同名成员 &#xff08;3&#xff09;多态 &#xff08;4&#xff09;抽象类 五、Python操作…