当前位置: 首页 > news >正文

小白学习机械视觉笔记(四)图像

之前在计算机方面对图像的了解只是接触过图像文件,如JPG文件、PNG文件等,现在通过学习有了更深入的理解。
图像文件是作为CANMV K230模块对外交互的一个接口,需模块内部工作更多是由图像对象和图像数组完成的。
图像对象是指image.Image类(CanMV 自定义类),是 CanMV 中机器视觉处理的核心类,封装了丰富的图像操作方法和函数,支持绘图、编码保存、格式转换、特征检测等丰富操作。
图像数组是指ulab.numpy.ndarray类型的图像数据,支持数值计算(切片、数学运算),可以直接喂给 KPU 模型进行推理。说什么“KPU是神经网络处理器,可以在低功耗的情况下实现卷积神经网络计算”,我都不太理解,我感觉KPU就是一个张量的硬件处理器,因为他的输入输出都为张量——tensor数据。看在这我又撞见了“张量”,张量是多维数组,而ulab.numpy.ndarray是为micropython简化而来的二维数组,在 K230 的 CanMV 环境中,ulab.numpy.ndarray 实际上充当了 tensor 的角色,在 K230 上,ulab.numpy.ndarray 就是你打交道最多的"张量"类型。ulab.numpy.ndarray也有严重的缺点,它本质上是纯数值矩阵,不能直接用于读取或保存图像文件(如 JPG、PNG)。它也不支持直接进行图像绘制(如画框、写字)等高层语义操作。所以在后期想把AI2d处理结果看一下,废了不少劲。
说到图像,还想说几句关于图像显示的 OSD。以前不知道 OSD 是什么,现在觉得这个做法真是很聪明,可以很方便地对原始图像进行二次加工。
下面记录一些图像方面的坑和经验:
1.运行

img_obj=image.Image(480,800,image.RGBP888,alloc=image.ALLOC_REF,data=img)img_obj.save("/sdcard/output.bmp")

提示
OSError: current format not support save function!
也就是image.RGBP888格式的图像对象不能保存成图形文件。
2.使用img.rotation_corr()旋转图像画布不跟着旋转,致使旋转后的图像画面不完整。
3.记录一个NCHW或CHW转img对象函数

defnchw2img(w,h,nchw):ifhasattr(nchw,'to_numpy'):# 如果不是 ndarray(比如是 Tensor),就调用.to_numpy()转换 ai2d_output_np=nchw.to_numpy()#ai2d_output_np=nchw.to_numpy()# 类型转换print(ai2d_output_np.shape)# 预处理后的shape为[1,3,256,256]# 使用transpose处理输出为HWC排布的np数据,然后在np数据上创建RGB888格式的Image实例用于在IDE显示效果 shape=ai2d_output_np.shape ai2d_output_tmp=ai2d_output_np.reshape((shape[0]*shape[1],shape[2]*shape[3]))ai2d_output_tmp_trans=ai2d_output_tmp.transpose()ai2d_output_hwc=ai2d_output_tmp_trans.copy().reshape((shape[2],shape[3],shape[1]))#out_img=image.Image(256,256,image.RGB888,alloc=image.ALLOC_REF,data=ai2d_output_hwc)out_img=image.Image(w,h,image.RGB888,alloc=image.ALLOC_REF,data=ai2d_output_hwc)else:# 如果类型完全匹配 np.ndarray,说明已经是普通数组了,直接用 ai2d_output_np=nchw#ai2d_output_np=nchw.to_numpy()# 类型转换print(ai2d_output_np.shape)# 预处理后的shape为[3,256,256]# 使用transpose处理输出为HWC排布的np数据,然后在np数据上创建RGB888格式的Image实例用于在IDE显示效果 shape=ai2d_output_np.shape ai2d_output_tmp=ai2d_output_np.reshape((shape[0],shape[1]*shape[2]))ai2d_output_tmp_trans=ai2d_output_tmp.transpose()ai2d_output_hwc=ai2d_output_tmp_trans.copy().reshape((shape[1],shape[2],shape[0]))#out_img=image.Image(256,256,image.RGB888,alloc=image.ALLOC_REF,data=ai2d_output_hwc)out_img=image.Image(w,h,image.RGB888,alloc=image.ALLOC_REF,data=ai2d_output_hwc)returnout_img

4.AIBase 模块 API 手册 — CanMV K230
对于开发中常见的数据类型转换,这里给出对应的示例供参考。
Tips:
Image对象转ulab.numpy.ndarray:

importimageimg.to_rgb888().to_numpy_ref()#返回的array是HWC排布

ulab.numpy.ndarray转Image对象:

importulab.numpyas npimportimageimg_np=np.zeros((height,width,4),dtype=np.uint8)img=image.Image(width,height,image.ARGB8888,alloc=image.ALLOC_REF,data=img_np)

ulab.numpy.ndarray转tensor类型:

importulab.numpyas npimportnncase_runtimeas nn img_np=np.zeros((height,width,4),dtype=np.uint8)tensor=nn.from_numpy(img_np)

tensor 类型转ulab.numpy.ndarray:

importulab.numpyas npimportnncase_runtimeas nn img_np=tensor.to_numpy()
http://www.jsqmd.com/news/980925/

相关文章:

  • 淮北劳力士+欧米茄手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • Go语言(Golang)开发工程师全景解析:岗位职责·语言优势与使用场景·各城市薪资·发展前景·高考志愿填报(2026版)
  • 别再直接转unsigned short了!深入理解fp16与float互转的IEEE 754标准(附C代码详解)
  • 谁说专业投票很难做?云众评选小白也能上手(免费+防刷+模板) - 微信投票小程序
  • 3分钟让Figma说中文:设计师必备的界面本地化解决方案
  • 如何用VRM-Addon-for-Blender插件快速实现3D模型转换:新手完整指南
  • 【Unity教程】使用vuforia创建简单的AR实例
  • 旧物交换网站源码包:SpringBoot后端+Vue前端,含数据库脚本、部署文档与操作视频
  • Cursor大规模代码重构实战:AST语义驱动的自动化迁移方案
  • 淮南劳力士+欧米茄手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • Java在线考试系统源码:Spring Boot后端+Vue3前端,支持智能组卷与双模式阅卷
  • PHP树结构实现与遍历算法
  • 2026年6月最新版苏州第三方CMACNAS甲醛检测治理口碑名单:万清CMA检测中心等5家深度测评 - 一休咨询
  • Off-Policy Actor-Critic 与重要性采样
  • Python开发工程师全景解析:岗位职责·各城市薪资·发展前景·高考志愿填报(2026版)
  • 2026如何提升营销岗位的职场能力和核心竞争力
  • 99个免费公共Tracker终极指南:让BT下载速度飙升300%的完整方案
  • Bili23 Downloader 技术解析:B站流媒体架构与API交互机制研究
  • 2024 LLM开发实操指南:本地化部署与RAG微调全链路
  • 黄冈美度天梭+宝玑手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • LLM代理层消亡史:当模型原生能力让网关退化为透传器
  • 如何在3分钟内为Microsoft Word添加APA第7版参考文献格式?
  • 激活 Change Pointers,让 SAP HR OM 模型只分发变化而不是重发整棵组织树
  • 吉安法穆兰+卡地亚手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • 计算机毕业设计之django基于python网络安全攻防学习平台
  • 嘉定区配镜深度调研:行业洗牌下,本土品牌如何突围?—— 以嘉艺眼镜公场为例 - 国麟测评
  • 双喜临门|腾视科技杭州总部及深圳子公司乔迁新址,以全新姿态奔赴新征程!
  • 深度解析 Deep-Live-Cam:从原理到实战的 AI 换脸技术指南
  • douyin-downloader:如何通过三层架构设计实现抖音内容的高效批量采集
  • 高校信息安全课用的Python版CA证书系统(带源码+部署指南+全流程截图)