python cv 在图片上绘制不规则图形
时间: 2023-12-22 10:04:29 浏览: 175
要在图片上绘制不规则图形,可以使用 OpenCV 库中的函数 `cv2.fillPoly()`。该函数可以在图像上绘制任意多边形。
以下是一个简单的例子,绘制了一个不规则的五边形并在其中填充颜色:
```python
import numpy as np
import cv2
# 创建一个黑色的图像
img = np.zeros((512,512,3), np.uint8)
# 定义五个顶点坐标
pts = np.array([[10,100], [100,50], [200,150], [140,250], [30,200]], np.int32)
# 在图像上绘制多边形
cv2.fillPoly(img, [pts], (255,255,255))
# 显示图像
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的示例中,我们首先创建了一个大小为 512x512 的黑色图像。然后我们定义了五个顶点坐标,并使用 `cv2.fillPoly()` 函数在图像上绘制了一个多边形。最后,我们将图像显示出来。
如果要绘制更复杂的不规则图形,只需要定义更多的顶点坐标即可。
相关问题
给我写一个python打开图片可以使用鼠标在图片中绘制不规则框线的代码
以下是Python代码,可以打开图片并使用鼠标在图片中绘制不规则框线:
```python
import cv2
# 定义全局变量
drawing = False # 是否正在绘制
ix, iy = -1, -1 # 起始坐标
# 鼠标回调函数
def draw_rectangle(event, x, y, flags, param):
global ix, iy, drawing
if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
ix, iy = x, y
elif event == cv2.EVENT_MOUSEMOVE:
if drawing == True:
cv2.rectangle(img, (ix, iy), (x, y), (, 255, ), -1)
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
cv2.rectangle(img, (ix, iy), (x, y), (, 255, ), -1)
# 读取图片
img = cv2.imread('image.jpg')
# 创建窗口并绑定鼠标回调函数
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_rectangle)
while True:
cv2.imshow('image', img)
k = cv2.waitKey(1) & xFF
if k == 27: # 按ESC键退出
break
cv2.destroyAllWindows()
```
运行代码后,会弹出一个窗口显示图片,可以使用鼠标在图片中绘制不规则框线。按ESC键退出程序。
给我写一个python打开图片可以使用鼠标在图片标点并链接标点绘制不规则框线的代码
以下是 Python 代码,可以打开图片并使用鼠标标点并链接标点绘制不规则框线:
```python
import cv2
# 定义鼠标事件回调函数
def draw_roi(event, x, y, flags, param):
global img, points
if event == cv2.EVENT_LBUTTONDOWN:
points.append((x, y))
if len(points) >= 2:
cv2.line(img, points[-2], points[-1], (, , 255), 2)
cv2.imshow("image", img)
# 读取图片
img = cv2.imread("test.jpg")
cv2.imshow("image", img)
# 定义鼠标事件
points = []
cv2.setMouseCallback("image", draw_roi)
# 循环等待按下 ESC 键退出
while True:
if cv2.waitKey(1) == 27:
break
# 绘制不规则框线
if len(points) >= 2:
cv2.line(img, points[-1], points[], (, , 255), 2)
cv2.imshow("image", img)
cv2.waitKey()
cv2.destroyAllWindows()
```
这段代码使用 OpenCV 库读取图片,并定义了一个鼠标事件回调函数 `draw_roi`,当鼠标左键按下时,将当前坐标添加到 `points` 列表中,并绘制连接前后两个点的线段。最后,当按下 ESC 键时,绘制不规则框线并显示图片。
阅读全文