python cv 在图片上绘制不规则图形
时间: 2023-12-22 15:04:29 浏览: 67
要在图片上绘制不规则图形,可以使用 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-opencv2利用cv2.findContours()函数不规则图形
cv2.findContours()函数可以用于查找图像中的轮廓,包括不规则图形。使用该函数需要先将图像进行二值化处理,然后传入二值化后的图像和轮廓查找模式,函数会返回轮廓的列表和层级信息。
下面是一个简单的示例代码:
```
import cv2
# 读取图像并转为灰度图
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
# 显示结果
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```