labelme 保存 imageData 机制探究

  • python调试
  • js实现

python调试

import json
import numpy as npfrom cv2 import cv2import labelme.utils as luimport PIL.ExifTags
import PIL.Image
import PIL.ImageOpsimport base64img_path = ''def img_arr_to_b64(img_arr):img_pil = PIL.Image.fromarray(img_arr)f = io.BytesIO()# img_pil.save(f, format="PNG")img_pil.save(f, format="JPEG")img_bin = f.getvalue()if hasattr(base64, "encodebytes"):img_b64 = base64.encodebytes(img_bin)else:img_b64 = base64.encodestring(img_bin)# imagedata=str(base64.b64encode(img_bin), 'utf-8')imagedata=str(base64.b64encode(img_bin).decode("utf-8"))return imagedataimg_pil = PIL.Image.open(img_path)
img_arr = np.array(img_pil)# img_arr = img_data_to_arr(img)
img_b64 = img_arr_to_b64(img_arr)

在调试程序中发现选择img_pil.save(f, format="JPEG")的参数formatJPEG时解析的结果和labelme可视化的Qt界面保存的结果比较相似。

js实现

在前端vue中可使用以下方法得到base64编码,参数fileObj为传入图像filefile.raw:

getBase64Image(fileObj) {return new Promise(function(resolve) {const image = new Image()image.src = URL.createObjectURL(fileObj)image.onload = function() {const that = this;var canvas = document.createElement("canvas");canvas.width = that.width;canvas.height = that.height;var ctx = canvas.getContext("2d");ctx.drawImage(that, 0, 0, canvas.width, canvas.height);var dataURL = canvas.toDataURL("image/jpeg", 0.75); // 注意该压缩率参数,可调节,但本人觉得0.75差不多resolve(dataURL);}});
},

注意得到的base64编码带有前缀,labelme生成的json的imageData项则没有,可以把去掉前缀的编码复制到json中尝试用labelme打开以检验。

【前端】【labelme】labelme 保存 imageData 的 base64编码机制 —— python 源码探究与 js 实现相关推荐

  1. OpenCV技巧 | 常用格式图片保存为透明背景图片(附Python源码)-教你轻松制作Logo

    导读 本文主要介绍使用OpenCV将常用格式图片保存为透明背景图片的方法与实现代码. 实现目标 本文的目标有如下两个: ① 将常见格式[jpg/png/bmp]白色背景图片转换保存为透明背景图片: ② ...

  2. 多目标遗传优化算法nsga2求解复杂约束问题【python源码实现,实数编码】

    效果图如下: 提示:专栏解锁后,可以查看该专栏所有文章. 文章目录 一.必备知识 二.nsga2(遗传算法为实数编码) 2.1 有规则的例子 2.2 没有规则的例子 总结 一.必备知识 十分钟了解完多 ...

  3. 智慧党建云平台小程序 v2.4.9+前端(公众号+小程序一体)开源版源码下载安装教程

    智慧党建云平台(vlinke_fdcparty)v2.4.9小程序功能模块,源码带最新微信小程序前端,小程序主程序后端,播播资源网小编测试前后端正常使用!分享的版本是最新标准版模块,模块是目前比官方低 ...

  4. Base64编码和Python解码

    base64是网络上最常见的用于传输8Bit字节码的编码方式之一,是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息. 采用Base64编码具有不可读性,需要解码后才能阅读. 本文是关于 ...

  5. 【源码】PDF.js批注注释插件库(纯JS). 创建和保存PDF批注(PDF 高亮/签名/插图/截屏/文本框/画笔/多边形)-pdf.js

    基于 PDF.js 开发了 PDF 批注注释插件库,支持多种批注类型,支持写入批注到pdf中并保存,为目前纯前端 JavaScript 最佳实现方案,完美支持 老版浏览器.手机.平板 等移动端设备,仅 ...

  6. 仿淘宝电商网站管理系统前端静态页面(html+jquery+css)(含毕业设计论文及源码)

    摘要·······································································Ⅰ 1 绪论····················· ...

  7. tiny_jpeg.h编码JPEG图像源码注释

    前言 tiny_jpeg.h代码只有1000+行,可读性比较强, 不像libjpeg那么繁琐.想要读懂tiny_jpeg的压缩源码还需要对JPEG文件格式有比较详细的理解,这里推荐一篇博客<jp ...

  8. Laravel-admin 表单保存一对多关联数据(源码探究到功能实现)

    我的个人博客:逐步前行STEP 由于Laravel-admin只支持表单保存一对一关联数据,要想保存一对多关联数据,还得从了解它的源码入手,看有没有空子可钻. 首先,进入源码中的Form.php的st ...

  9. 三种加密方式: sha1加密、MD5加密、Base64加密 (附H5源码和js源码)

    js的加密没特别多的办法,常见的就三种, MD5加密.Base64加密和sha1加密 一. sha1加密 H5源码: <!DOCTYPE html> <html><hea ...

最新文章

  1. 46 定时任务模块APScheduler
  2. 扩展正则及正则基本用法
  3. 深度学习框架Neon
  4. TI Davinci DM6441嵌入式Linux移植攻略——UBL移植篇
  5. Oracle rac 组件reload,亲测Linux 7系列 上安装Oracle RAC 遇到的问题和坑
  6. 5.1--5.1.2 Permutations of a Multiset 多重集合的排列
  7. unity 阳光插件_【复盘】Environmental Composition初尝试总结(附实用插件推荐)
  8. 如何有效阅读英文数据手册?
  9. ECG/PPG量测解决方案
  10. java 字符串 空白字符_Java String中移除空白字符的多种方式汇总
  11. Java--反射机制
  12. Spire.XLS:一款Excel处理神器
  13. 怎么修改win8计算机用户名和密码忘了怎么办,win8忘记了登陆密码怎么办|win8用户登入密码忘了的解决措施...
  14. 在CentOS7下的OpenCV环境搭建与基于C++的人脸辨认(Face Recognition)参考指南
  15. 快速幂算法和大整数求模
  16. 文献阅读笔记 # Space/Aerial-Assisted Computing Offloading for IoT Applications: A Learning-Based Approach
  17. (私人收藏)蓝色夜空背景的通用商务PPT模板
  18. 工厂模式——猫粮厂的演进
  19. EMC测试(5)——传导发射测试(CE)
  20. 会议论文小套路:解读交通管科类优秀会议论文的文章结构

热门文章

  1. vue添加弹出框数据绑定
  2. 服务器ftp网站怎么临时关闭,如何停止pyftpdlib FTP服务器?
  3. 修改windows cmd f2快捷_解放你的右手,实测12个超好用的自带快捷键
  4. mysql序列号生成_超详细的mysql数据库GTID介绍—概念、优缺点、原理、生命周期等
  5. oracle配置控制文件快照的位置以及名称为,Oracle 快照控制文件(snapshot control file)...
  6. mysql的gobye_Mysql學習(一)添加一個新的用戶並用golang操作Mysql
  7. Batch入门教程(1)
  8. 动态规划之多重部分和问题
  9. 《南溪的目标检测学习笔记》——特征归一化(meadstd)
  10. 面向对象语言编程的心得