OpenCV 画矩形
时间: 2025-07-18 16:01:45 浏览: 3
<think>我们正在使用OpenCV绘制矩形。根据引用,OpenCV提供了`cv2.rectangle()`函数来绘制矩形。下面我将详细说明该函数的使用方法,并给出示例代码。
### 函数说明
`cv2.rectangle()`函数的语法如下:
```python
cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
```
参数说明:
- `img`: 要在其上绘制矩形的图像(输入输出图像)。
- `pt1`: 矩形的一个顶点坐标(左上角)。
- `pt2`: 矩形与`pt1`对角的另一个顶点坐标(右下角)。
- `color`: 矩形的颜色,使用BGR格式的元组,例如`(255,0,0)`表示蓝色。
- `thickness`: 线条的粗细。如果为负值(如`cv2.FILLED`),则绘制填充矩形。
- `lineType`: 线条类型(可选),例如`cv2.LINE_4`、`cv2.LINE_8`(默认)或`cv2.LINE_AA`(抗锯齿)。
- `shift`: 坐标点的小数位数(可选),用于子像素绘制。
### 示例代码
以下是一个使用OpenCV绘制矩形的完整示例:
```python
import cv2
import numpy as np
# 创建一个白色背景的图像,尺寸为500x500,3通道(彩色)
img = np.ones((500, 500, 3), dtype=np.uint8) * 255 # 白色背景
# 定义矩形的两个对角顶点
pt1 = (50, 50) # 左上角坐标 (x1, y1)
pt2 = (250, 250) # 右下角坐标 (x2, y2)
color = (0, 255, 0) # 绿色,BGR格式
thickness = 2 # 线条粗细
# 在图像上绘制矩形
cv2.rectangle(img, pt1, pt2, color, thickness)
# 再绘制一个填充矩形(红色)
pt1_fill = (300, 300)
pt2_fill = (450, 450)
color_fill = (0, 0, 255) # 红色
cv2.rectangle(img, pt1_fill, pt2_fill, color_fill, cv2.FILLED)
# 显示图像
cv2.imshow('Rectangle Example', img)
cv2.waitKey(0) # 等待任意按键
cv2.destroyAllWindows() # 关闭窗口
```
### 代码解释
1. **创建图像**:使用`numpy`创建一个500x500的白色背景图像。
2. **绘制矩形**:
- 第一个矩形:从点(50,50)到(250,250),绿色边框,线条粗细为2像素。
- 第二个矩形:从点(300,300)到(450,450),红色填充(使用`cv2.FILLED`作为厚度)。
3. **显示图像**:通过`cv2.imshow`显示图像,按任意键关闭窗口。
### 注意事项
- 坐标原点在图像左上角,x轴向右,y轴向下。
- 颜色顺序是BGR(蓝、绿、红),而不是常见的RGB。
- 如果要在现有图像上绘制矩形,可以直接读取图像文件,例如`img = cv2.imread('image.jpg')`。
§§相关问题§§
1. 如何用OpenCV绘制圆形?
2. 如何用OpenCV绘制直线和多边形?
3. 如何设置矩形的透明度?
4. 如何通过鼠标交互绘制矩形?</think>### OpenCV 绘制矩形方法详解
在 OpenCV 中,绘制矩形主要使用 `cv2.rectangle()` 函数。以下是详细说明和示例:
#### 函数语法
```python
cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
```
#### 参数说明:
1. `img`:目标图像(`numpy.ndarray` 类型)
2. `pt1`:矩形左上角坐标 `(x1, y1)`
3. `pt2`:矩形右下角坐标 `(x2, y2)`
4. `color`:颜色值 `(B, G, R)`
- 蓝色:`(255,0,0)`
- 绿色:`(0,255,0)`
- 红色:`(0,0,255)`
5. `thickness`(可选):
- 正值:边框粗细(像素)
- **负值(如 `-1` 或 `cv2.FILLED`):填充矩形**
6. `lineType`(可选):
- `cv2.LINE_4`:4连通线
- `cv2.LINE_8`:8连通线(默认)
- `cv2.LINE_AA`:抗锯齿线
7. `shift`(可选):坐标小数位数(通常不需设置)
#### 示例代码
```python
import cv2
import numpy as np
# 创建白色背景图像 (500x500)
img = np.ones((500, 500, 3), dtype=np.uint8) * 255
# 绘制蓝色边框矩形 (左上角:100,100, 右下角:300,300)
cv2.rectangle(img, (100, 100), (300, 300), (255, 0, 0), thickness=2)
# 绘制绿色填充矩形 (左上角:150,150, 右下角:250,250)
cv2.rectangle(img, (150, 150), (250, 250), (0, 255, 0), thickness=cv2.FILLED)
# 绘制红色抗锯齿矩形 (左上角:200,200, 右下角:400,400)
cv2.rectangle(img, (200, 200), (400, 400), (0, 0, 255), thickness=3, lineType=cv2.LINE_AA)
# 显示结果
cv2.imshow("Rectangles", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
#### 关键特性:
1. **坐标系统**:原点 `(0,0)` 在图像**左上角**,x轴向右,y轴向下
2. **对角点定义**:只需指定两个对角顶点(通常左上+右下)
3. **填充模式**:设置 `thickness=-1` 可绘制实心矩形
4. **抗锯齿**:使用 `lineType=cv2.LINE_AA` 获得平滑边缘
#### 注意事项:
- 颜色格式为 **BGR**(非 RGB)
- 坐标值为整数,支持浮点需设置 `shift` 参数
- 图像数据需是 `uint8` 类型(0-255范围)
> 引用说明:函数参数定义参考 OpenCV 官方文档[^1],绘制原理基于图像像素操作[^3],示例代码整合自实践案例[^2][^4]。
阅读全文
相关推荐















