程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Python图像处理:OpenCV基础教程

balukai 2025-01-01 17:57:16 文章精选 5 ℃

OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉和机器学习软件库。它提供了大量的图像和视频处理功能,可以用于各种应用场景,比如人脸识别、物体检测、图像分割等。下面是一个关于如何使用 OpenCV 进行基本图像处理的教程。

安装 OpenCV

首先,你需要安装 OpenCV。如果你还没有安装,可以通过 pip 安装 OpenCV 的 Python 接口:

Bash

深色版本

1pip install opencv-python

为了能够使用一些额外的功能,比如图形用户界面,你可能还需要安装 opencv-python-headless 或者 opencv-contrib-python:

Bash

深色版本

1pip install opencv-python-headless
2pip install opencv-contrib-python

基础图像操作

读取图像

Python

深色版本

1import cv2
2
3# 读取图像
4image = cv2.imread('path/to/your/image.jpg')
5
6# 显示图像
7cv2.imshow('Image', image)
8cv2.waitKey(0)  # 等待按键事件,0 表示无限等待
9cv2.destroyAllWindows()
10
11# 保存图像
12cv2.imwrite('output_image.jpg', image)

图像属性

Python

深色版本

1# 获取图像尺寸 (高度, 宽度, 通道数)
2height, width, channels = image.shape
3print(f"Image size: {width}x{height} ({channels} channels)")
4
5# 获取像素值
6pixel_value = image[100, 100]  # 获取 (100, 100) 位置的像素值
7print(f"Pixel value at (100, 100): {pixel_value}")

图像裁剪与缩放

Python

深色版本

1# 裁剪图像
2cropped_image = image[50:200, 100:300]
3
4# 缩放图像
5resized_image = cv2.resize(image, (640, 480))  # 将图像调整为 640x480 大小

高级图像处理

灰度转换

Python

深色版本

1gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
2cv2.imshow('Gray Image', gray_image)
3cv2.waitKey(0)
4cv2.destroyAllWindows()

边缘检测

Python

深色版本

1edges = cv2.Canny(gray_image, threshold1=50, threshold2=150)
2cv2.imshow('Edges', edges)
3cv2.waitKey(0)
4cv2.destroyAllWindows()

形态学操作

Python

深色版本

1kernel = np.ones((5, 5), np.uint8)
2
3# 腐蚀
4erosion = cv2.erode(edges, kernel, iterations=1)
5
6# 膨胀
7dilation = cv2.dilate(edges, kernel, iterations=1)
8
9# 开运算
10opening = cv2.morphologyEx(edges, cv2.MORPH_OPEN, kernel)
11
12# 闭运算
13closing = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)

图像轮廓检测

Python

深色版本

1# 查找轮廓
2contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
3
4# 绘制轮廓
5cv2.drawContours(image, contours, -1, (0, 255, 0), 2)
6cv2.imshow('Contours', image)
7cv2.waitKey(0)
8cv2.destroyAllWindows()

完整示例

将上述代码片段组合成一个完整的程序:

Python

深色版本

1import cv2
2import numpy as np
3
4# 读取图像
5image = cv2.imread('path/to/your/image.jpg')
6
7# 显示原始图像
8cv2.imshow('Original Image', image)
9
10# 转换为灰度图像
11gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
12cv2.imshow('Gray Image', gray_image)
13
14# 边缘检测
15edges = cv2.Canny(gray_image, threshold1=50, threshold2=150)
16cv2.imshow('Edges', edges)
17
18# 形态学操作
19kernel = np.ones((5, 5), np.uint8)
20opening = cv2.morphologyEx(edges, cv2.MORPH_OPEN, kernel)
21cv2.imshow('Opening', opening)
22
23# 轮廓检测
24contours, _ = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
25cv2.drawContours(image, contours, -1, (0, 255, 0), 2)
26cv2.imshow('Contours', image)
27
28cv2.waitKey(0)
29cv2.destroyAllWindows()

注意事项

  • 在显示图像时,确保你的程序在适当的位置调用了 cv2.waitKey() 和 cv2.destroyAllWindows(),这样可以正确地管理窗口。
  • OpenCV 使用 BGR 色彩空间而不是 RGB。
  • 使用适当的阈值和参数来适应不同的图像和需求。

这些基本操作是使用 OpenCV 进行图像处理的良好起点。你可以在此基础上探索更多高级功能,例如特征检测、模板匹配、颜色空间转换等。

最近发表
标签列表