opencv矩形包围框 代码
时间: 2024-10-29 21:05:58 浏览: 113
在OpenCV(计算机视觉库)中,矩形包围框通常用于标记图像中的兴趣区域或者物体位置。你可以通过`cv2.rectangle()`函数创建并绘制矩形。下面是一个基本的Python示例:
```python
import cv2
import numpy as np
# 加载图像
image = cv2.imread('image.jpg')
# 定义矩形的位置和大小(左上角(x, y),宽度(w),高度(h))
x, y, w, h = 50, 60, 100, 80
# 创建矩形颜色和厚度
color = (0, 255, 0) # 绿色,也可以自定义
thickness = 2 # 线条粗细
# 使用cv2.rectangle()在图像上绘制矩形
cv2.rectangle(image, (x, y), (x+w, y+h), color, thickness)
# 显示结果
cv2.imshow('Rectangle on Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中, `(x, y)` 对应于矩形的左上角坐标,`(x+w, y+h)` 则是右下角坐标。`cv2.imshow()` 和 `cv2.waitKey()` 分别用于显示图片和等待用户按键。
相关问题
opencv矩形框摆正
### 使用 OpenCV 进行矩形框倾斜校正
要实现将倾斜的矩形框校正为水平垂直方向的功能,可以通过以下方法完成:
#### 方法概述
通过提取图像中的矩形轮廓特征,并计算其旋转角度来应用仿射变换。具体过程如下:
1. **获取灰度图**
首先将彩色图像转换为灰度图像以便后续处理[^2]。
2. **二值化处理**
对灰度图像进行阈值分割操作,从而获得黑白二值化的图像。
3. **寻找轮廓并找到最小外接矩形**
利用 `cv.findContours` 函数检测图像中的轮廓,并调用 `cv.minAreaRect` 获取包围目标物体的最小面积矩形及其旋转角度。
4. **计算旋转矩阵**
根据最小外接矩形的角度参数构建旋转矩阵 `M`,该矩阵定义了如何对原图像进行旋转变换以使矩形变为直立状态。
5. **执行仿射变换**
应用 `cv.warpAffine` 函数基于上述旋转矩阵调整整个图像的姿态,最终达到矫正效果。
以下是完整的 Python 代码示例:
```python
import cv2 as cv
import numpy as np
# 加载原始图像
src = cv.imread('imageTextR.png')
(h, w) = src.shape[:2]
# 转换成灰度图
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
# 图像二值化
_, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)
# 查找轮廓
contours, _ = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
if contours:
# 找到最大的轮廓(假设这是我们要校正的目标)
contour = max(contours, key=cv.contourArea)
# 计算最小外接矩形
rect = cv.minAreaRect(contour)
box = np.intp(cv.boxPoints(rect))
# 提取旋转角度
angle = rect[2]
# 如果角度小于 -45°,则将其修正为正值
if abs(angle) > 45:
angle += 90
# 构建旋转中心和旋转矩阵
center = (w // 2, h // 2)
M = cv.getRotationMatrix2D(center, angle, scale=1.0)
# 执行仿射变换
rotated = cv.warpAffine(src, M, (w, h), flags=cv.INTER_CUBIC, borderValue=(255, 255, 255))
# 显示结果
cv.imshow("Rotated", rotated)
cv.waitKey(0)
cv.destroyAllWindows()
```
此脚本实现了从加载输入图片到最后展示经过倾斜校正的结果全过程。
opencv python最小包围矩形
### 使用 OpenCV-Python 实现最小包围矩形
为了创建最小外接矩形,`cv2.minAreaRect()` 函数用于获取给定轮廓的最小面积边界框。此函数返回一个包含矩形中心 `(x, y)`、宽度和高度以及旋转角度的结果元组。
对于绘制该矩形,则需进一步利用 `cv2.boxPoints()` 将上述结果转换成四个顶点坐标以便于绘图操作[^1]。
以下是具体实现方法:
```python
import cv2
import numpy as np
# 创建空白图像并定义测试轮廓
img = np.zeros((500, 500), dtype=np.uint8)
contours = [
[[100], [100]],
[[300], [100]],
[[300], [300]],
[[100], [300]]
]
cnt = np.array(contours).reshape((-1, 1, 2)).astype(np.int32)
rect = cv2.minAreaRect(cnt) # 获取最小外接矩形参数
box = cv2.boxPoints(rect) # 获得矩形角点位置
box = np.intp(box) # 数据类型转换为整型
cv2.drawContours(img, [box], -1, (255, 255, 255), thickness=2) # 绘制矩形到图片上
cv2.imshow('Min Area Rectangle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码首先初始化了一张黑色背景的灰度图像,并设定了一个简单的四边形作为目标对象。接着调用了 `minAreaRect()` 来获得围绕这个多边形的最佳拟合矩形的位置信息;再通过 `boxPoints()` 方法得到实际可用于绘画的四个角落坐标的数组形式表示法。最后一步则是将这些数据应用至原图画出相应的图形[^3]。
阅读全文
相关推荐
















