【halcon】write_image 图片保存

前言

write_image 是一个可以用来保存图片的算子,可以将Image对象保存成各种格式的图片。还可以对图片进行压缩。
在这里插入图片描述

正文

参数:

  1. Image(输入对象): 输入图像或输入图像的数组。支持的像素类型包括byte、direction、cyclic、int1、complex、int2、uint2、vector_field、int4、int8和real。

  2. Format(输入控制): 要保存图像的图形格式。支持的格式包括:

    • ‘tiff’,‘bigtiff’:TIFF格式。
    • ‘bmp’:Windows-BMP格式。
    • ‘jpeg’:JPEG格式。
    • ‘jp2’:JPEG-2000格式。
    • ‘jpegxr’:JPEG-XR格式。
    • ‘png’:PNG格式。
    • ‘hobj’:HALCON Iconic Object(HOBJ)格式。
    • ‘ima’:HALCON格式。
  3. FillColor(输入控制): 不属于图像域(区域)的像素的填充灰度值。对于灰度值图像,必须传递0(黑色)到255(白色)之间的值。对于RGB彩色图像,RGB值可以直接传递为十六进制值,例如,对于黄色背景,可以传递0xffff00(红=255,绿=255,蓝=0)。

  4. FileName(输入控制): 图像文件的名称,包括文件扩展名。具体的扩展名取决于所选择的图形格式。

支持的格式:

  • TIFF格式:

    • 支持所有HALCON像素类型。
    • 可以使用’deflate [num]'、‘jpeg [num]’、'lzw’和’packbits’进行压缩。
    • 可以将图像域以压缩形式存储为’mask’(默认设置)或作为附加的alpha通道存储为’alpha’。
  • BMP格式:

    • 仅支持像素类型为byte的图像。
    • 仅支持包含一个通道(灰度值图像)或三个通道(RGB图像)的图像。
  • JPEG格式:

    • 仅支持像素类型为byte的图像。
    • 可以指定质量值确定的压缩率,例如,‘jpeg 30’。
  • JPEG-2000格式:

    • 支持lossless和lossy压缩。
    • 可以指定决定压缩率的质量值,例如,‘jp2 40’。
  • JPEG-XR格式:

    • 支持lossless和lossy压缩。
    • 可以指定决定压缩率的质量值,例如,‘jpegxr 30’。
  • PNG格式:

    • 支持lossless压缩。
    • 可以指定0到9的压缩级别,或使用字符串’best’、'fastest’和’none’进行选择。
  • HALCON Iconic Object(HOBJ)格式:

    • 支持所有HALCON图像类型。
  • HALCON格式:

    • 现在是遗留的格式,建议使用HOBJ格式。

执行信息:

  • 多线程类型: 可重入(可以与非独占操作同时运行)。
  • 多线程范围: 全局(可以从任何线程调用)。
  • 自动并行化: 在元组级别上自动并行化。

返回结果:

如果参数值正确,write_image 操作符将返回值2(H_MSG_TRUE)。否则,将引发异常。

问答环节

如果我想保存成png格式如何实现压缩?

要将图像保存为PNG格式并实现压缩,你可以在 write_image 操作符的 Format 参数中指定压缩级别。压缩级别可以是介于0和9之间的整数,其中0表示无压缩,9表示最佳压缩。此外,你还可以使用一些字符串来选择压缩级别,如’best’表示最佳压缩,'fastest’表示最快速度,'none’表示无压缩。

以下是将图像保存为PNG格式并进行压缩的示例:

// 将图像保存为PNG格式并设置压缩级别
write_image(Image, 'png 5', 0, 'output.png');

在上述示例中,'png 5' 指定了压缩级别为5。你可以根据需要调整压缩级别。如果你希望实现最佳压缩,可以将字符串设置为 'png best'

// 将图像保存为PNG格式并使用最佳压缩级别
write_image(Image, 'png best', 0, 'output.png');

请注意,使用更高的压缩级别可能会导致保存过程变慢,因此你可能需要权衡压缩率和性能。

JPEG 如何保存呢?

当你想将图像保存成 JPEG 格式时,可以使用 write_image 操作符,并设置格式参数为 'jpeg',同时可以通过指定质量参数来调整 JPEG 的压缩质量。以下是详细介绍:

操作符签名

write_image(Image, 'jpeg [quality]', FillColor, 'output.jpg');
  • Image: 待保存的图像或图像数组。
  • ‘jpeg [quality]’: JPEG 格式字符串,quality 参数可选,用于指定压缩质量。quality 的范围一般为 0 到 100,值越大表示质量越高,文件大小越大。例如,‘jpeg 90’ 表示压缩质量为 90。
  • FillColor: 用于指定图像外部区域的填充颜色。对于 JPEG,这通常不太影响,可以设置为 0。
  • ‘output.jpg’: 输出文件的名称和路径。

示例

// 保存为 JPEG 格式,压缩质量为 90
write_image(Image, 'jpeg 90', 0, 'output.jpg');

注意事项

  1. 压缩质量: 质量设置为 100 表示最高质量,0 表示最低质量。适当的质量设置可以在保持图像质量的同时减小文件大小。
  2. 压缩速度和文件大小: 选择较高的质量通常会导致较大的文件大小,同时保存时间可能稍长。在速度和文件大小之间需要平衡,具体取决于应用需求。
  3. 颜色损失: JPEG 是有损压缩格式,会引入一定程度的颜色损失。这种损失在较高的质量设置下会减小,但不会完全消除。

根据你的具体需求,可以根据测试和实验来选择合适的质量参数和其他选项。

哪一种保存的时间比较快呢?

这里我写了一个程序进行测试:

 HObject img;HOperatorSet.ReadImage(out img, "1.tif");stopwatch.Restart();HOperatorSet.WriteImage(img, "png fastest", 0, "p1");stopwatch.Stop();Debug.WriteLine($"png fastest: {stopwatch.ElapsedMilliseconds}");stopwatch.Restart();HOperatorSet.WriteImage(img, "png bset", 0, "p2");stopwatch.Stop();Debug.WriteLine($"png bset: {stopwatch.ElapsedMilliseconds}");stopwatch.Restart();HOperatorSet.WriteImage(img, "tiff", 0, "t"); stopwatch.Stop();Debug.WriteLine($"tiff: {stopwatch.ElapsedMilliseconds}");stopwatch.Restart();HOperatorSet.WriteImage(img, "bmp", 0, "b"); stopwatch.Stop();Debug.WriteLine($"bmp: {stopwatch.ElapsedMilliseconds}");stopwatch.Restart();HOperatorSet.WriteImage(img, "jpeg", 0, "j1");stopwatch.Stop();Debug.WriteLine($"jpeg: {stopwatch.ElapsedMilliseconds}");stopwatch.Restart();HOperatorSet.WriteImage(img, "jpeg 30", 0, "j2");stopwatch.Stop();Debug.WriteLine($"jpeg 30: {stopwatch.ElapsedMilliseconds}");stopwatch.Restart();HOperatorSet.WriteImage(img, "jpeg 90", 0, "j3");stopwatch.Stop();Debug.WriteLine($"jpeg 90: {stopwatch.ElapsedMilliseconds}");

读取的是一张56M图片,是黑白的,执行结果如下(单位ms):

png fastest: 1247
png bset: 3421
tiff: 144
bmp: 179
jpeg: 126
jpeg 30: 100
jpeg 90: 183

最快的是 jpeg 压缩质量为30的时候。虽然质量只有30,但一眼看上去也没啥区别,不过大小是小的真的多(不愧是是有损压缩!)。

在这里插入图片描述
当然还有其他格式,我没有一一去测试,大家可以自行尝试!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

druid配置wall导致无法批量sql

1、现象 2、原配置 spring:autoconfigure:exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfiguredatasource:druid:stat-view-servlet:enabled: trueloginUsername: ***loginPassword: ***allow:web-stat-filter:enabled: truefilter:wall:conf…

MATLAB知识点:矩阵元素的引用

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自第3章 3.3.2 矩阵元素的引用 在讲解矩阵元素的引用之…

【Unity优化(一)】音频优化

整理资教程:https://learn.u3d.cn/tutorial/unity-optimization-metaverse 1.音频优化 音频一般不会成为性能瓶颈,是为了节省内存和优化包体大小。 1.0 文件格式和压缩格式 原始音频资源尽量采用WAV格式。 移动平台音频尽量采用Vorbis压缩格式&#x…

net start mysql服务名无效|发生系统错误 解决办法

未输入正确的mysql服务名 解决办法: 使用net start命令查看可用的服务名,找到mysql的服务名 未使用管理员身份运行命令提示符 解决方法: 使用管理员身份运行命令提示符

背包2讲(2.6)

问题1&#xff1a;装箱问题 题解&#xff1a;这题其实本质上也是01背包&#xff0c;只不过算是变式&#xff0c;要求剩余空间最小值&#xff0c;我们可以转换成最大可以装多少的问题&#xff0c;然后就可以很快的写出题的答案 #include<bits/stdc.h> using namespace st…

Positive Technologies 帮助修复了流行的 Yealink 视频会议系统中的一个危险漏洞

Yealink 感谢我们的专家发现了视频会议系统 Yealink Meeting Server 中的一个关键漏洞 该公司在全球 IP 电话市场排名第一&#xff0c;是五大线上会议解决方案供应商之一&#xff0c;其产品已在 140 多个国家和地区使用。 漏洞 YVD-2023-1257833 (BDU:2024-00482) 属于操作系…

打包 iOS 的 IPA 文件

目录 摘要 引言 准备 选择证书类型 创建应用程序 设置应用程序标识和证书 配置构建设置 构建应用程序 导出IPA 签名和导出 代码案例演示 完成 总结 参考资料 摘要 本篇博客将为您介绍如何打包iOS的IPA文件。从APP提交、创建应用程序、设置应用程序标识和证书、配…

centos安装harbor

安装docker yum install epel-release yum-utils#docker官网源 yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce -y 安装docker-compose curl -SL https://github.com/docker/compose/releases/download/v2…

【自然语言处理-工具篇】spaCy<1>--介绍及安装指南

目录 前言 安装指南 pip conda spaCy升级 总结 前言 spaCy是一个开源的自然语言处理库,用于处理和分析文本数据。它提供了许多功能,包括分词、词性标注

2023-总结

文章目录 工作贡献集成登录角色今年的工作感想 总结感想题外话 工作 今年也是换了公司。 在上个公司首先就是学到了技术&#xff0c;拓展了知识层面。至于离开&#xff0c;也是简单得想多去走走试试。感谢公司和同事的栽培和包容。 来到现在任职的公司同事也是非常友好。刚来…

EMC防护

EMI是指电子设备在自身工作过程中产生的电磁波&#xff0c;对外发射并对设备其它部分或外部其它设备造成干扰。EMI测试项目包括电源线传导骚扰&#xff08;CE&#xff09;测试、信号、控制线传导骚扰&#xff08;CE&#xff09;测试、辐射骚扰&#xff08;RE&#xff09;测试、…

记录关于node接收并解析前端上传excel文件formData踩的坑

1.vue2使用插件formidable实现接收文件&#xff0c;首先接口不可以使用任何中间件&#xff0c;否则form.parse()方法不执行。 const express require(express) const multipart require(connect-multiparty); const testController require(../controller/testController)/…

Android 横屏应用开发如何隐藏左边黑色边缘

最近公司开发一个横屏应用的项目&#xff0c;Phone和Pad一套代码编译&#xff0c;需要考虑到全局横屏状态下的应用&#xff0c;起初竖屏的时候代码是没问题的&#xff0c;可是到切换横屏遇到了黑边问题&#xff0c;先来看看竖屏的时候怎么写的 setContentView之前设置 getWind…

力扣53. 最大子数组和(滑动窗口,动态规划)

Problem: 53. 最大子数组和 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 思路1:滑动窗口 1.为求出最大连续的子数组和,我们逻辑上假设有一个窗口在原数组上滑动, 欲求出最大连续,则需要保证窗口中的所有元素和最起码大于0; 2.即当当前窗口中的元素值的和小于0…

[自然语言处理|NLP] 文本分类与情感分析,数据预处理流程,包括了同义词替换和拼写纠正,以及使用NLTK库和TextBlob库进行标记化和情感分析(附代码)

[自然语言处理|NLP] 文本分类与情感分析,数据预处理流程,包括了同义词替换和拼写纠正,以及使用NLTK库和TextBlob库进行标记化和情感分析(附代码)。 自然语言处理(Natural Language Processing,简称NLP)是人工智能领域的一个重要分支,涉及了处理和理解人类语言的技术…

带你实现用自己域名打开Tomcat

文章目录 Tomcat1.1、Tomcat 下载1.2、Tomcat 文件图解1.3、 启动或关闭 Tomcat1.3.1、 启动1.3.2、 关闭程序2.1、 修改端口号2.2、修改主机名称Tomcat 1.1、Tomcat 下载 首先去Tomcat 官网下载找到我们需要下载的版本 1.2、To

Linux 服务器安装maven

1、压缩文件下载Maven – Download Apache Maven 2、解压 tar -xvf apache-maven-3.8.4-bin.tar.gz 3、配置环境变量 在/etc/profile中保存Maven的环境变量&#xff1a; export M2_HOME/opt/server/apache-maven-3.5.4 export PATH$PATH:$M2_HOME/bin 4、通过source生效文件 so…

第4节、电机多段转动【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍用控制步进电机三个主要参数角度、速度、方向&#xff0c;实现简单的步进电机多段控制 一、目标功能 输入多个目标角度&#xff0c;以及每个角度对应的速度&#xff0c;实现步进电机的多段多速…

“小手艺”有“大情怀”, 《青春手艺人》赋能乡村振兴,传承新时代文化

文化传承发展要坚持“守正创新”&#xff0c;以守正创新的正气和锐气&#xff0c;赓续历史文脉、谱写当代华章。中央广播电视总台农业农村节目中心推出的聚焦年轻手艺人故事的微纪录片《青春手艺人》&#xff0c;为守正创新的文化传承增添了新的鲜活的青春故事。节目积极响应二…

为 Spring Boot 项目配置 Logback 日志

关于 Logback 日志系统是一个线上项目必备的素质之一&#xff0c;代表性的日志框架 Log4j、SLF4J、Logback 这哥仨竟然是亲兄弟&#xff0c;他们有一个亲爹&#xff0c;那就是巨佬 Ceki Gulcu。 由于 Spring Boot 的默认日志框架选用的 Logback&#xff0c;再加上 Log4j2 之前…