单元一
第1课 什么是 OpenCV——图像与像素

一、任务目标
放大手机照片会看见色块——那就是像素。弄清一张图在电脑里怎么用数字表示,后面调色、裁剪才说得通。
二、核心概念讲清楚
图像由像素网格组成;彩色图每个像素常有 B、G、R 三个数。OpenCV 默认通道顺序是 BGR(不是日常说的 RGB)。
- 像素:最小的颜色格子
- 彩色图常为三通道
- OpenCV 默认 BGR 顺序
1想像表格行是高、列是宽
2看一个格子读出三个通道数
3记住 BGR蓝绿红顺序
4再谈处理先认结构再算法
三、跟着想一遍(小例子)
创建 2×3 的小图,把某像素设为 (255,0,0) 在 OpenCV 里偏蓝通道。
易错:按 RGB 习惯去理解 OpenCV 颜色却不核对。
正确:先确认库的通道顺序再调色。
想一想:为什么放大到一定程度会「糊成格子」?
四、算法思路
任务:放大手机照片会看见色块——那就是像素。弄清一张图在电脑里怎么用数字表示,后面调色、裁剪才说得通。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。
本课主要用到:图像输入、图像预览/对照区。
- 1明确任务「什么是 OpenCV——图像与像素」:运行后你希望看到什么结果(文字、图形或计算结果)。
- 2确认输入:演示图/上传照片/摄像头抓一帧,得到一张可用的 BGR 图。
- 3用 print 核对 shape/检测数量等关键信息,并对照图像页预览。
- 4对照参考代码跑通后,只改一个参数,观察结果如何变化。
流程示意(可对照左侧文字)
五、语句功能讲解
下面只列出本课首次出现的语句/函数。已在前面课讲过的不再重复;先认新语句,再对照参考代码。
| 语句 | 作用 | 本课用法 |
|---|---|---|
print() | 把内容显示到屏幕 | 括号里是要说出来的话或计算结果。 |
cv2 | OpenCV 的 Python 接口 | import cv2 后调用读图、变色、检测等函数。 |
numpy() | 数值与数组工具 | 图像在程序里常是 numpy 数组。 |
shape() | 数组形状 | 彩色图常见 (高, 宽, 通道)。 |
zeros() | 创建全零数组 | 常用来「画」一张空白图。 |
六、知识点讲解
图像输入与显示:预览/采集 → 处理或保存 → 显示或回放。缺一环后面都做不了。
先弄清本课输入与输出,再进编程练习对照现象。
七、编程练习
先理解概念,再在下方 Mixly 运行(opencv-python);没有摄像头可用演示图或上传照片。请先读本页「四、算法思路」与「五、知识讲解」,再点载入。
看 shape 与一个像素的 BGR。
参考代码(对照抄写到下方 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((2, 3, 3), dtype=np.uint8)
img[0, 0] = (255, 0, 0)
img[0, 1] = (0, 255, 0)
img[1, 2] = (0, 0, 255)
print("shape:", img.shape)
print("dtype:", img.dtype)
print("左上角像素 BGR:", img[0, 0])
print("OpenCV 版本前缀:", cv2.__version__[:3])
# 放大后送到右侧对照区,方便看见色块
vis = cv2.resize(img, (240, 160), interpolation=cv2.INTER_NEAREST)
show_bgr(vis, "像素示意")
正在载入编程环境
正在载入 Mixly 文本编程环境…
八、课堂练习
选出你认为正确的一项,再点「检查」。
彩色图在 OpenCV 里每个像素常见几个通道?
OpenCV 默认彩色通道顺序是?
九、本节小结
图像 ≈ 数字表;