CanMV 变焦+自动对焦双buff!立创开发板首款变焦摄像头实操指南

Viewed 32

问题描述


重磅升级!K230 CanMV不仅支持变焦,还能一键开启自动对焦!结合官方代码示例,我们能清晰看到从传感器初始化到画面显示的完整流程——从此机器视觉开发不仅能“拉远拉近”,还能自动对准焦点,这波实操性直接拉满,开发者上手更省心!

一、从代码看核心能力:不止变焦,还有自动对焦

仔细拆解代码示例,能发现K230 CanMV的两大关键特性,这也是它区别于普通OpenMV摄像头的核心优势

image.png

1. 自动对焦(Auto Focus):告别手动调焦代码中直接调用sensor.auto_focus()接口,既能查询当前对焦状态(返回布尔值),也能传入True开启自动对焦。无需手动调整镜头,系统会自动对准目标,解决了“变焦后画面模糊”的痛点。

2. 对焦能力查询:sensor.focus_caps()可获取传感器的对焦能力(返回元组),能提前判断所用摄像头是否支持自动对焦,避免开发中因硬件不兼容踩坑,这在实际项目中非常实用。

3. 显示绑定:实时预览变焦+对焦效果代码里通过Display.bind_layer()将传感器通道0与显示图层绑定,还能开启to_ide=True在OpenMV IDE中实时查看画面——调试时不用反复烧录,变焦、对焦效果即时可见,效率直接提升。

二、跟着代码学实操:5步实现“变焦+自动对焦”

基于官方代码示例,我们拆解出可直接复用的核心步骤,从初始化到画面显示,每一步都有明确代码对应,新手也能跟着做:

官方firmware路径:
https://kendryte-download.canaan-creative.com/developer/releases/canmv_k230_micropython/daily_build/

官方demo路径:
\CanMV\sdcard\examples\17-Sensor\camera_auto_focus_lcd.py

1. 基础初始化:加载模块+创建传感器

先导入必要模块,再初始化Sensor对象——这是所有操作的前提,代码里特意强调了reset()必须调用,否则后续功能会失效:

import time, os, sys
from media.sensor import *
from media.display import *
from media.media import *

# 1. 创建Sensor对象并复位,用默认配置启动
sensor = Sensor()
sensor.reset()  # 关键步骤:不复位会导致后续设置无效

2. 改变分辨率:设置输出分辨率(800x480示例)

代码中用sensor.set_framesize()指定分辨率为800x480:

# 2. 设置通道0输出分辨率
sensor.set_framesize(width=800, height=480)

3. 自动对焦:1行代码开启

代码里用2次sensor.auto_focus()实现“查询-开启-再查询”的流程,能清晰看到对焦状态变化,实际开发中可直接复用:

# 3. 自动对焦操作:先查状态,再开启,最后验证
focus_caps = sensor.focus_caps()
print("开启前对焦状态:", sensor.auto_focus())  # 初始状态通常为False

sensor.auto_focus(True)  # 开启自动对焦

# (可选)查询传感器对焦能力,确认硬件是否支持
focus_caps = sensor.focus_caps()
print("开启后对焦状态:", sensor.auto_focus())  # 返回True,确认开启成功

4. 画面显示:绑定图层+初始化LCD/IDE预览

绑定显示,实时看到变焦+对焦的效果。

# 4. 配置图像格式+绑定显示图层
sensor.set_pixformat(Sensor.YUV420SP)  # 常用格式,兼顾画质与性能
bind_info = sensor.bind_info()  # 获取传感器绑定信息
Display.bind_layer(**bind_info, layer=Display.LAYER_VIDEO1)  # 绑定到视频图层1

# 初始化显示:支持LCD(ST7701)+ IDE预览(to_ide=True)
Display.init(Display.ST7701, width=800, height=480, to_ide=True)
MediaManager.init()  # 初始化媒体管理器,必须在sensor.run()前调用

5. 启动运行:开始捕获画面

最后调用sensor.run()启动传感器,进入循环后就能持续输出“变焦+自动对焦”的画面,代码里还加了os.exitpoint()确保安全退出:

# 5. 启动传感器并持续运行
sensor.run()

#获取自动变焦范围
focus_caps_tuple = sensor.focus_caps()
print(focus_caps_tuple)

while True:
    os.exitpoint()  # 响应退出信号,避免强制中断报错

image.png

三、 应用场景升级:变焦+自动对焦能做什么?

有了这两个功能,K230 CanMV的应用场景直接拓宽,尤其适合对“清晰度”和“灵活性”有要求的项目:

  • 机器人视觉:机器人移动时,先通过变焦找到目标(如货架上的物品),再自动对焦清晰识别二维码,无需手动干预;

  • 工业质检:检测电路板时,变焦放大焊点区域,自动对焦到细节,避免因对焦不清漏检瑕疵;

  • 便携式观测设备:户外观察时,既能变焦拉近距离,又能自动对焦到远处物体(如鸟类、标牌),画面清晰不模糊。

四、参考资料

官方API文档:
https://www.kendryte.com/k230_canmv/zh/main/zh/api/mpp/K230_CanMV_Sensor%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.html#

立创商城购买链接:
https://item.szlcsc.com/54973554.html

庐山派购买链接:
https://lckfb.com/project/detail/lckfb-lspi-k230-1g-canmv

1 Answers

有C++的demo吗

暂时没有,后面可以尽情期待!

感觉你们家镜头可选的太少了,不然我就准备上生产环境了,能不能多适配一些sensor