Python opencv 如何将边界框和图像一起翻转90度
时间: 2024-12-08 08:25:06 浏览: 29
在Python的OpenCV库中,如果你想将包含边界框的图像旋转90度,你可以使用`cv2.rotate()`函数结合`np.rot90()`函数。假设你已经有了一个包含边界框信息的`image`和一个`bboxes`列表,其中每个元素是一个包含四个值的边界框(x, y, width, height),步骤如下:
1. 首先,你需要对原始图像和边界框应用旋转操作。这通常意味着你需要先转换边界框,因为旋转后的坐标需要按照新的图像尺寸来计算。
```python
import cv2
import numpy as np
rotated_image = cv2.rotate(image, cv2.ROTATE_90_COUNTERCLOCKWISE) # 逆时针旋转90度
```
2. 对于边界框,由于旋转了整个图像,你可能需要更新它们的坐标。这可以通过将原边界框的y轴减去新图像高度并加上宽度,x轴保持不变来实现。这里有一个简化版本的例子:
```python
def adjust_bboxes_for_rotation(bboxes, image_shape):
rotated_height, rotated_width = image_shape[:2]
new_bboxes = []
for bbox in bboxes:
x, y, w, h = bbox
adjusted_x = x # 因为宽度不变
adjusted_y = rotated_height - (y + h) # 将y轴向下移动
new_bboxes.append((adjusted_x, adjusted_y, w, h))
return new_bboxes
rotated_bboxes = adjust_bboxes_for_rotation(bboxes, rotated_image.shape)
```
3. 现在,`rotated_image`包含了旋转后的图像,`rotated_bboxes`是相应的调整后的边界框。如果你还想在图像上绘制新的边界框,可以使用`cv2.rectangle()`:
```python
for bbox in rotated_bboxes:
x, y, w, h = bbox
cv2.rectangle(rotated_image, (x, y), (x+w, y+h), color, thickness)
```
阅读全文