第1章:图像基础与像素操作
各位同学,欢迎来到《电子提花花样编程实战》的第一课。
做提花编程,说白了就是跟图像打交道。你设计的每一个花样,最终都要变成像素矩阵,再转换成织机能够识别的信号。所以,图像基础是绕不开的第一道坎。
我个人习惯,不管做什么项目,先把底层的数据结构搞明白。图像在计算机里到底是什么?不是一张漂亮的图片,而是一堆数字。嗯,就是这么朴实无华。
1.1 读取图像——你的第一行代码
在Python里,读取图像最常用的库是OpenCV和PIL。我个人更推荐OpenCV,因为它在工业场景下更稳定,处理速度也快。
先看一个最简单的例子:
import cv2
# 读取图像
img = cv2.imread('pattern.jpg')
# 检查是否读取成功
if img is None:
print("图像读取失败,检查路径")
else:
print(f"图像尺寸:{img.shape}")
这里有个坑,我曾经踩过。OpenCV默认读取的是BGR格式,不是我们常见的RGB。如果你直接用matplotlib显示,颜色会偏蓝。解决办法很简单:
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
1.2 RGB与灰度模式——颜色是怎么存的?
一张彩色图像,本质上是一个三维数组。每个像素点由三个通道组成:红、绿、蓝。每个通道的值范围是0到255。
举个例子,纯红色像素就是(255, 0, 0),纯绿色是(0, 255, 0)。你想想看,如果三个通道都是255,那就是白色;都是0,那就是黑色。
但在提花编程里,我们经常用灰度图。为什么?因为提花机控制的是纱线的颜色种类,灰度图更容易做二值化处理。
# 转灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print(f"灰度图尺寸:{gray.shape}") # 输出:(height, width)
灰度图只有一个通道,每个像素值代表亮度。0是纯黑,255是纯白。中间值就是不同程度的灰色。
1.3 像素矩阵的表示——图像就是数字
图像在计算机里,就是一个矩阵。灰度图是二维矩阵,彩色图是三维矩阵。
我们来看一个具体的例子。假设有一张3x3的灰度图:
[[120, 130, 140],
[150, 160, 170],
[180, 190, 200]]
每个数字代表一个像素的亮度。120偏暗,200偏亮。就这么简单。
彩色图呢?每个像素点是一个三元组:
[[[120, 50, 80], [130, 60, 90], [140, 70, 100]],
[[150, 80, 110], [160, 90, 120], [170, 100, 130]],
[[180, 110, 140], [190, 120, 150], [200, 130, 160]]]
第一个数字是红色通道,第二个是绿色,第三个是蓝色。你想想看,如果我要提取某个区域的颜色,直接操作这个矩阵就行。
1.4 用NumPy操作像素——这才是真功夫
OpenCV读取的图像,底层就是NumPy数组。所以,你可以直接用NumPy的函数来操作像素。
我举个例子,把图像上半部分变暗:
import numpy as np
# 假设img是灰度图
height, width = img.shape
half_height = height // 2
# 上半部分亮度减半
img[0:half_height, :] = img[0:half_height, :] * 0.5
你看,就这么一行代码。NumPy的切片操作,直接对应像素区域。
再比如,我要把图像中所有大于200的像素变成白色:
img[img > 200] = 255
这就是所谓的「阈值操作」。在提花编程里,我们经常用这种方法来简化花样。
我曾经做过一个项目,客户给的图案有上千种颜色。提花机最多支持16种纱线。怎么办?用NumPy做颜色量化,把相近的颜色合并。核心代码就几行:
# 颜色量化:把256级灰度压缩到8级
quantized = (img // 32) * 32
除以32再乘以32,相当于把0-255的区间分成8段,每段取整。这样就把256种颜色压缩到了8种。
img_copy = img.copy()
知识体系总览
下面这张图,是我自己画的。它展示了本章的核心逻辑:从图像文件到像素矩阵,再到NumPy操作。
这张图很清楚地展示了流程:图像文件 → 读取 → 像素矩阵 → 根据需求选择灰度或彩色 → 用NumPy做各种操作。每一步都对应着具体的代码实现。
本章小结
好了,第一课的内容就这些。总结一下:
- 读取图像:用cv2.imread(),注意BGR和RGB的区别
- 灰度模式:单通道,每个像素0-255,代表亮度
- RGB模式:三通道,每个像素由红绿蓝组成
- 像素矩阵:图像就是NumPy数组,操作数组就是操作图像
- NumPy操作:切片、阈值、颜色量化,都是提花编程的常用技巧
下一章,我们会深入讲图像的几何变换。到时候你会看到,旋转、缩放、裁剪这些操作,在NumPy里也不过是几行代码的事。