帮助中心/最新通知

质量为本、客户为根、勇于拼搏、务实创新

< 返回文章列表

【开发相关】# 零基础也能学会的视觉处理:用 Python + OpenCV 打造你的第一套图像识别工具

发表时间:2025-01-16 01:32:56 小编:主机乐-Yutio

最近身边越来越多人问我:“我想学一点计算机视觉,但不知道从哪开始……要学深度学习吗?要懂模型吗?”

其实不用那么复杂。

如果你能运行 Python,那你就已经有了入门视觉处理的一切基础。今天我就带你用最简单的方式体验一次完整的图像处理流程,让电脑真正“看懂”一张图片。

这一篇文章适合任何人,不管你是学生、工程师、还是纯粹好奇,只要你想入门视觉,读完后你就能写出自己的第一段视觉代码。

ChatGPT Image 2025年12月11日 14_23_39.png

一、为什么 Python + OpenCV 是最适合入门的组合

如果你完全没有经验,Python + OpenCV 是最轻松的选择,因为它有三个优势:

1. 安装简单,不用折腾环境

一行命令就能完成安装:

展开
代码语言: Bash
自动换行
自动换行
AI代码解释
pip install opencv-python

2.文档丰富,问题随便搜都有人解决过

 

OpenCV 是视觉领域最经典的库,几乎你想到的功能它都有。

3. 代码简洁,几行就能实现一个小功能

 

比如彩色转灰度你只需要一行:

展开
代码语言: Python
自动换行
自动换行
AI代码解释
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

二、用一分钟时间准备好环境

你只需要做两件事:

  1. 安装 Python(你大概率已经有)

  2. 安装 OpenCV:

展开
代码语言: Bash
自动换行
自动换行
AI代码解释
pip install opencv-python

3.验证安装是否成功:

展开
代码语言: Bash
自动换行
自动换行
AI代码解释
import cv2
print(cv2.__version__)

image.png

三、第一件事:让电脑“看到”一张图片

所有视觉处理的基础,就是把图像读进来。

新建一个 Python 文件,写入下面的代码:

展开
代码语言: Python
自动换行
自动换行
AI代码解释
import cv2

img = cv2.imread("test.jpg")

cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

当你能看到图片弹出来时,请恭喜自己:

你已经完成第一个视觉任务:读取与显示图像。

这是我的测试图片,可自取,随便一张都行
test.jpg
这样屏幕会有一个框显示出来
image.png

四、灰度化:视觉处理的第一把“瑞士军刀”

很多分析不需要颜色,只需要光强信息。灰度化就是把彩色转成黑白。

展开
代码语言: Python
自动换行
自动换行
AI代码解释
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("Gray", gray)

为什么要灰度化?

  • 减少计算量

  • 更容易提取轮廓和边缘

  • 很多检测算法只接受灰度输入

下面那个就是灰度图
image.png

五、模糊一下,结果反而更好:高斯模糊

在进行边缘检测前,通常需要减少噪声,否则图片会复杂得让算法难以判断。

展开
代码语言: Python
自动换行
自动换行
AI代码解释
blur = cv2.GaussianBlur(gray, (5,5), 0)
cv2.imshow("Blur", blur)

image.pngimage.png
其实细看还是有点区别的,第一个是原图,第二个是高斯模糊后的

别看代码短,高斯模糊的重要性非常高,它能帮助算法过滤掉无关噪点,让“真正的边缘”更容易被找到。

六、最有成就感的一步:边缘检测(Canny)

这是视觉世界里最经典的操作之一,只需要两行代码:

展开
代码语言: Python
自动换行
自动换行
AI代码解释
edges = cv2.Canny(blur, 100, 200)
cv2.imshow("Edges", edges)

你会看到一幅干净利落的黑白边缘图,被提取出来的那些线条,就是图像的重要结构信息。
这是我的
image.png

然后一个综合代码出现了,经历了图像读取,灰度转换,高斯模糊,边缘检测的程序新鲜出炉

展开
代码语言: Python
自动换行
自动换行
AI代码解释
import cv2

img = cv2.imread("test.jpg")

# cv2.imshow("Image", img)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# cv2.imshow("Gray", gray)

blur = cv2.GaussianBlur(gray, (5,5), 0)
# 参数是:
# gray: 输入图像
# (5,5): 高斯核大小,必须是奇数
# 0: 高斯标准差,0表示自动计算  
# cv2.imshow("Blur", blur)

edges = cv2.Canny(blur, 100, 200)
# 参数是:
# blur: 输入图像
# 100: 低阈值,低于此值的像素将被认为是边缘
# 200: 高阈值,高于此值的像素将被认为是强边缘

cv2.imshow("Edges", edges)

# cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

七、不到三分钟做一个“人脸检测器”

我记得第一次知道人脸识别是很小的时候,在一个科幻电影里面,一个超级金库需要人脸识别,感觉超级酷,那现在我们只需要很短的时间就可以复刻一个人脸检测,不过还开不了金库门!

我简单搜索了一张人脸图片
人脸照片- 下載免費優質圖片| Freepik

OpenCV 提供现成模型,你不用训练任何东西,只要直接用:

展开
代码语言: Python
自动换行
自动换行
AI代码解释
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

检测并框出人脸:

展开
代码语言: Python
自动换行
自动换行
AI代码解释
faces = face_cascade.detectMultiScale(gray, 1.1, 4)

for (x,y,w,h) in faces:
    cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2)

但是实际写起来就需要加一些东西
源码放这里

展开
代码语言: Python
自动换行
自动换行
AI代码解释
import cv2
import numpy as np

# 获取OpenCV分类器的正确路径
cascade_path = cv2.data.haarcascades + "haarcascade_frontalface_default.xml"
# 加载分类器,haarcascade_frontalface_default.xml是OpenCV提供的默认人脸检测器,cv2.data.haarcascades是OpenCV的默认数据路径,+"haarcascade_frontalface_default.xml"是完整的路径                                                               
face_cascade = cv2.CascadeClassifier(cascade_path)
# cv2.CascadeClassifier()函数的参数是分类器的路径,返回一个分类器对象

# 检查分类器是否成功加载
if face_cascade.empty():
    """
    如果分类器为空,说明加载失败,退出程序
    """
    print("错误:无法加载人脸检测分类器")
    print(f"分类器路径:{cascade_path}")
    exit()

# 确保测试图像存在,否则创建一个示例图像
img_path = "face_test.jpg" # 被检测的文件的路径
if not cv2.os.path.exists(img_path):
    """
    如果测试图像不存在,说明加载失败,退出程序
    """
    exit()

img = cv2.imread(img_path)

# 检查图像是否成功加载
if img is None:
    print(f"错误:无法读取图像 {img_path}")
    exit()

# cv2.imshow("Image", img)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# cv2.imshow("Gray", gray)

blur = cv2.GaussianBlur(gray, (5,5), 0)
# 参数是:
# gray: 输入图像
# (5,5): 高斯核大小,必须是奇数
# 0: 高斯标准差,0表示自动计算  
# cv2.imshow("Blur", blur)
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
# 参数是:
# gray: 输入图像
# 1.1: 缩放因子,每次检测时,图像会按此因子缩放
# 4: 每个目标至少检测到4次才会被认为是一个有效目标

for (x,y,w,h) in faces:
    cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2)
    # 参数是:
    # img: 输入图像
    # (x,y): 矩形框的左上角坐标
    # (x+w, y+h): 矩形框的右下角坐标
    # (0,255,0): 矩形框的颜色,这里是绿色
    # 2: 矩形框的线宽

cv2.imshow("Faces", img)


cv2.waitKey(0)
cv2.destroyAllWindows()

这就是你的第一个小“视觉应用原型”。

感谢模特做出的贡献
image.png

 


联系我们
返回顶部