已知矩形左上角及右下角的坐标,如何用opencv绘制矩形框
时间: 2023-02-12 12:33:24 浏览: 291
可以使用 OpenCV 函数 cv2.rectangle() 绘制矩形框,代码如下:
```
import cv2
img = cv2.imread('image.jpg')
x, y, w, h = 50, 50, 100, 100
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow('rectangle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
- 参数说明:
- `img`:输入图像
- `(x, y)`:左上角坐标
- `(x+w, y+h)`:右下角坐标
- `(255, 0, 0)`:矩形颜色(BGR)
- `2`:线宽
相关问题
python和opencv给轮廓画框,已知左上角起始点坐标x,y和框的宽高w,h
在Python中,尤其是利用OpenCV库进行图像处理时,如果你想在已知左上角起始点坐标(x, y)以及框的宽度(w)和高度(h)的基础上给轮廓画出边框,你可以按照以下步骤操作:
1. 首先,确保已经安装了`opencv-python`库,如果尚未安装,可以使用pip安装:`pip install opencv-python-headless`
2. 定义四个顶点,分别代表矩形的左上、右上、右下和左下角。这四个点可以用`(x, y)`、`(x+w, y)`、`(x+w, y+h)`和`(x, y+h)`来表示。
```python
import cv2
# 已知坐标和尺寸
top_left = (x, y)
width_height = (w, h)
# 计算其他三个顶点
top_right = (x + w, y)
bottom_right = (x + w, y + h)
bottom_left = (x, y + h)
# 创建一个四边形轮廓
points = np.array([[top_left], [top_right], [bottom_right], [bottom_left]], dtype="int32")
```
这里假设`np`是NumPy库的简称,用于创建整数数组。
3. 使用cv2.rectangle()函数,在原始图像上绘制这个矩形框。如果你已经有了一个图像变量`img`,你可以这样做:
```python
img_with_box = cv2.rectangle(img.copy(), top_left, bottom_right, color, thickness)
```
在这里,`color`是你想要的颜色,`thickness`决定了线条的粗细。例如,`2`通常表示实线边框。
4. 最后,显示带框的图像:
```python
cv2.imshow("Image with box", img_with_box)
cv2.waitKey(0) # 等待按键,0表示无限等待
cv2.destroyAllWindows()
```
记得在实际应用中替换`x`, `y`, `w`, 和 `h`为你需要的具体值。
opencv如何根据矩形四个角点的坐标得到矩形轮廓所有点坐标
首先,可以使用 `cv2.rectangle()` 函数绘制矩形轮廓,并且该函数需要输入矩形的左上角和右下角顶点坐标。如果已知矩形的四个顶点坐标,则可以计算出左上角和右下角顶点坐标,然后调用 `cv2.rectangle()` 函数绘制矩形轮廓。
如果要根据矩形四个角点的坐标得到矩形轮廓所有点坐标,可以使用 NumPy 库的 `linspace()` 函数在两个顶点之间生成一组等间隔的坐标值,然后根据这些坐标值生成矩形轮廓的所有点坐标。具体步骤如下:
1. 计算矩形的左上角和右下角顶点坐标:
```python
x1, y1 = min(x_coords), min(y_coords)
x2, y2 = max(x_coords), max(y_coords)
```
其中 `x_coords` 和 `y_coords` 分别为四个角点的横坐标和纵坐标列表。
2. 生成横坐标和纵坐标的等间隔坐标值:
```python
x_values = np.linspace(x1, x2, num=100, endpoint=True)
y_values = np.linspace(y1, y2, num=100, endpoint=True)
```
这里生成了 100 个等间隔的坐标值,可以根据实际情况调整 `num` 参数。
3. 生成矩形轮廓的所有点坐标:
```python
points = [(x, y) for x in x_values for y in y_values]
```
这里使用了列表推导式和 `zip()` 函数生成所有点的坐标元组。
完整代码示例:
```python
import cv2
import numpy as np
# 四个角点坐标
points = [(100, 100), (300, 100), (300, 200), (100, 200)]
# 提取横坐标和纵坐标列表
x_coords, y_coords = zip(*points)
# 计算左上角和右下角顶点坐标
x1, y1 = min(x_coords), min(y_coords)
x2, y2 = max(x_coords), max(y_coords)
# 生成横坐标和纵坐标的等间隔坐标值
x_values = np.linspace(x1, x2, num=100, endpoint=True)
y_values = np.linspace(y1, y2, num=100, endpoint=True)
# 生成矩形轮廓的所有点坐标
points = [(x, y) for x in x_values for y in y_values]
# 绘制矩形轮廓并显示
img = np.zeros((300, 400, 3), dtype=np.uint8)
cv2.drawContours(img, [np.array(points)], 0, (0, 255, 0), 2)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文