Python与OpenCV:图像操作与处理基础
立即解锁
发布时间: 2025-09-02 01:29:25 阅读量: 8 订阅数: 28 AIGC 

### Python与OpenCV:图像操作与处理基础
在计算机视觉领域,图像的处理和操作是非常重要的基础工作。Python和OpenCV为我们提供了强大的工具,帮助我们实现图像的加载、探索、像素操作以及基本形状的绘制等功能。下面将详细介绍这些内容。
#### 1. 图像的表示与基本操作
在OpenCV中,图像的像素值使用NumPy数组来表示。NumPy数组是图像网格及其颜色通道的多维表示,它让我们能够高效地存储、访问和操作图像的像素值。当我们读取图像时,OpenCV会创建一个NumPy数组。通过提供`(x, y)`坐标,我们可以从NumPy数组中获取对应像素的颜色值。
- 对于灰度图像,NumPy返回的是一个0到255之间的单值。
- 对于彩色图像,NumPy返回的是一个包含蓝、绿、红(BGR)值的元组。需要注意的是,OpenCV采用的是BGR顺序,而不是传统的RGB顺序。
在开始编写代码之前,我们要确保使用之前在特定目录下设置好的虚拟环境。以下是具体步骤:
1. 启动PyCharm IDE。
2. 创建一个新的项目(例如命名为`cviz`,即“computer vision”的缩写)。
3. 参考相关设置界面,确保选择“Existing Interpreter”并选中我们的虚拟环境`Python 3.8 (cv)`。
#### 2. 加载、探索和显示图像
下面的代码展示了如何读取图像文件并探索其属性,同时将图像显示在屏幕上。
```python
# Filename: Listing_2_1.py
import cv2
# image path
image_path = "images/marsrover.png"
# Read or load image from its path
image = cv2.imread(image_path)
# image is a NumPy array
print("Dimensions of the image: ", image.ndim)
print("Image height: ", format(image.shape[0]))
print("Image width: ", format(image.shape[1]))
print("Image channels: ", format(image.shape[2]))
print("Size of the image array: ", image.size)
# Display the image and wait until a key is pressed
cv2.imshow("My Image", image)
cv2.waitKey(0)
```
代码解释如下:
| 代码行 | 解释 |
| ---- | ---- |
| 1 | 导入OpenCV库,以便使用其功能。 |
| 4 | 将待加载图像的路径赋值给变量。如果输入路径在不同目录,需提供完整或相对路径。 |
| 7 | 使用OpenCV的`imread()`函数将图像读取到NumPy数组中,并赋值给变量`image`。 |
| 10 - 14 | 使用NumPy的特性,打印图像数组的维度、高度、宽度、通道数和数组大小(即像素数量)。 |
| 17 | 使用OpenCV的`imshow()`函数显示图像,该函数接受两个参数:图像窗口的名称和表示图像的NumPy数组。 |
| 18 | `waitKey()`函数使程序不会立即终止,而是等待用户按下任意键。当看到第17行显示的图像窗口时,按下任意键可终止程序,否则程序将阻塞。 |
#### 3. 访问和操作像素
我们可以通过坐标系统来访问和修改图像的像素值。以下代码展示了这一过程:
```python
# Filename: Listing_2_2.py
import cv2
# image path
image_path = "images/marsrover.png"
# Read or load image from its path
image = cv2.imread(image_path)
# Access pixel at (0,0) location
(b, g, r) = image[0, 0]
print("Blue, Green and Red values at (0,0): ", format((b, g, r)))
# Manipulate pixels and show modified image
image[0:100, 0:100] = (255, 255, 0)
cv2.imshow("Modified Image", image)
cv2.waitKey(0)
```
代码解释如下:
| 代码行 | 解释 |
| ---- | ---- |
| 1 - 6 | 导入OpenCV的`cv2`包并从指定路径读取图像。 |
| 9 | 使用NumPy语法获取坐标`(0, 0)`处像素的BGR值,并赋值给元组`(b, g, r)`。 |
| 10 | 打印该像素的BGR值。 |
| 13 | 选取y轴从0到100、x轴从0到100的像素范围,形成一个100×100的正方形,并将该范围内所有像素的值设置为`(255, 255, 0)`(即纯蓝、纯绿,无红色)。 |
| 14 | 显示修改后的图像。 |
| 15 | 程序等待用户按下任意键后退出。 |
#### 4. 在图像上绘制基本形状
OpenCV提供了方便的方法在图像上绘制各种基本形状,如直线、矩形和圆形。
##### 4.1 绘制直线
要在图像上绘制直线,可按以下步骤操作:
1. 将图像加载到NumPy数组中。
2. 确定直线的起始坐标。
3. 确定直线的结束坐标。
4. 指定直线的颜色。
5. 可选地,指定直线的厚度。
以下是绘制直线的代码示例:
```python
# Filename: Listing_2_3.py
import cv2
# image path
image_path = "images/marsrover.png"
# Read or load image from its path
image = cv2.imread(image_path)
# set start and end coordinates
start = (0, 0)
end = (image.shape[1], image.shape[0])
# set the color in BGR
color = (255,0,0)
# set thi
```
0
0
复制全文
相关推荐










