单元一
第3课 创建小图:shape 与通道

一、任务目标
拿到一张图先问:多高、多宽、几个通道?读懂 shape,才不会把宽高写反、把颜色调乱。
二、核心概念讲清楚
彩色图 shape 常为 (H, W, C):高、宽、通道。灰度图常为 (H, W)。注意顺序是高在前。
- H:行数(高度)
- W:列数(宽度)
- C:通道数,彩色多为 3
1得到 img数组或读入
2打印 shape看三个数
3对照含义高宽通道
4再切片/缩放用对下标
三、跟着想一遍(小例子)
shape=(120,160,3) 表示高 120、宽 160、三通道。
易错:把 (宽,高) 写反导致 resize 变形。
正确:记住 OpenCV 里 shape 先高后宽;resize 参数却常是 (宽,高)。
想一想:为什么 resize 的尺寸参数顺序容易和 shape 搞混?
四、算法思路
任务:拿到一张图先问:多高、多宽、几个通道?读懂 shape,才不会把宽高写反、把颜色调乱。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。
本课主要用到:图像输入、图像预览/对照区。
- 1明确任务「创建小图:shape 与通道」:运行后你希望看到什么结果(文字、图形或计算结果)。
- 2确认输入:演示图/上传照片/摄像头抓一帧,得到一张可用的 BGR 图。
- 3用 print 核对 shape/检测数量等关键信息,并对照图像页预览。
- 4对照参考代码跑通后,只改一个参数,观察结果如何变化。
流程示意(可对照左侧文字)
五、语句功能讲解
下面只列出本课首次出现的语句/函数。已在前面课讲过的不再重复;先认新语句,再对照参考代码。
| 语句 | 作用 | 本课用法 |
|---|---|---|
rectangle() | 画矩形 | 标注检测框或感兴趣区域。 |
六、知识点讲解
图像 shape给出高、宽与通道数;彩色 BGR 常见为 3 通道,灰度通常为 2 维(无单独通道维)或通道为 1。
先弄清本课输入与输出,再进编程练习对照现象。
七、编程练习
先理解概念,再在下方 Mixly 运行(opencv-python);没有摄像头可用演示图或上传照片。请先读本页「四、算法思路」与「五、知识讲解」,再点载入。
看高、宽、通道。
参考代码(对照抄写到下方 Mixly)
import cv2
import numpy as np
def show_bgr(img, title="预览"):
"""显示到 Mixly「OpenCV」页签右侧对照区(灰度会先转成 BGR)"""
if img is None:
return None
vis = img
if len(getattr(img, "shape", ())) == 2:
vis = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
try:
from js import window
push = getattr(window, "__ailessonsShowCvResultB64", None)
if push:
ok, buf = cv2.imencode(".jpg", vis, [int(cv2.IMWRITE_JPEG_QUALITY), 88])
if ok:
import base64
push(base64.b64encode(buf.tobytes()).decode("ascii"), str(title or "处理结果"))
except Exception as e:
print("对照区显示跳过:", e)
try:
cv2.imshow(vis, title)
except Exception:
try:
cv2.imshow(title, vis)
except Exception as e:
print("图像页显示跳过:", e)
return None
img = np.zeros((80, 120, 3), dtype=np.uint8)
cv2.rectangle(img, (10, 10), (50, 60), (0, 200, 255), -1)
h, w, c = img.shape
print("高:", h, "宽:", w, "通道:", c)
show_bgr(img, "色块示意")
正在载入编程环境
正在载入 Mixly 文本编程环境…
八、课堂练习
选出你认为正确的一项,再点「检查」。
shape 为 (100, 200, 3) 时宽是?
九、本节小结
会读 shape。