python opencv绘制多边形和多边形填充

本文介绍如何利用Python中的OpenCV库绘制多边形。通过具体的代码示例,展示了如何定义多边形顶点坐标并使用cv2.polylines和cv2.fillPoly函数在图像上绘制带填充和轮廓的多边形。
部署运行你感兴趣的模型镜像
import numpy as np
import cv2
import matplotlib.pyplot as plt
a = np.array([[[10,10], [100,10], [100,100], [10,100]]], dtype = np.int32)
b = np.array([[[100,100], [200,230], [150,200], [100,220]]], dtype = np.int32)
print(a.shape)
im = np.zeros([240, 320], dtype = np.uint8)
cv2.polylines(im, a, 1, 255)
cv2.fillPoly(im, b, 255)
plt.imshow(im)
plt.show()

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

Python OpenCV提供了多种绘制多边形的方法,以下是几种常见的方式: ### 绘制填充多边形 使用`cv2.polylines()`函数可以绘制填充多边形。示例代码如下: ```python import numpy as np import cv2 # 创建一张黑色背景图像 img = np.zeros((512, 512, 3), dtype=np.uint8) # 定义多边形的顶点坐标 pts = np.array([[100, 100], [200, 400], [400, 400], [400, 100]], np.int32) # 将多边形的顶点坐标转换为需要的格式 pts = pts.reshape((-1, 1, 2)) # 绘制多边形 cv2.polylines(img, [pts], True, (0, 255, 0), thickness=2) # 显示结果 cv2.imshow('Polygon', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 上述代码中,首先创建了一个黑色背景图像,然后定义了多边形的顶点坐标,将其转换为合适的格式后使用`cv2.polylines()`函数绘制多边形,最后显示结果 [^1]。 ### 绘制闭合的多边形 同样使用`cv2.polylines()`函数,通过设置`isClosed=True`来绘制闭合的多边形。示例代码如下: ```python import cv2 import numpy as np # 创建一张空白图像 image = np.zeros((400, 400, 3), dtype=np.uint8) # 定义多边形的顶点 points = np.array([[100, 200], [200, 100], [300, 200], [250, 300], [150, 300]], np.int32) # 绘制闭合多边形 cv2.polylines(image, [points], isClosed=True, color=(255, 0, 0), thickness=3) # 显示图像 cv2.imshow("Polygon", image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 此代码创建了空白图像,定义多边形顶点后,使用`cv2.polylines()`函数绘制闭合多边形并显示 [^2]。 ### 交互式绘制多边形 使用鼠标交互的方式绘制多边形,支持绘制多个多边形。示例代码如下: ```python import cv2 as cv import numpy as np def get_regions(img): regions = [] while True: points = [] def mouse_callback(event, x, y, flags, param): if event == cv.EVENT_LBUTTONDOWN: points.append([x, y]) cv.circle(img, (x, y), 5, (0, 0, 255), -1) cv.imshow('image', img) cv.namedWindow('image', cv.WINDOW_NORMAL) cv.setWindowProperty('image', cv.WND_PROP_FULLSCREEN, cv.WINDOW_FULLSCREEN) cv.imshow('image', img) cv.setMouseCallback('image', mouse_callback) while True: cv.imshow('image', img) key = cv.waitKey(1) & 0xFF if key == ord(' '): if points: regions.append(points.copy()) points = [] break elif key == 27: if points: regions.append(points.copy()) break if key == 27: cv.destroyAllWindows() break return regions ``` 该代码定义了一个`get_regions()`函数,通过鼠标点击事件记录多边形的顶点,按空格键可以结束当前多边形绘制,按ESC键退出绘制 [^3]。 ### 绘制填充多边形 使用`cv2.fillPoly()`函数可以绘制填充多边形,还可以一次填充多个图形。示例代码如下: ```python from matplotlib import pyplot as plt import numpy as np import cv2 img = np.zeros((1080, 1920, 3), np.uint8) contours = np.array([[0, 0], [300, 1000], [500, 800], [900, 1000]]) cv2.fillPoly(img, [contours], (255, 0, 0)) # 填充内部 plt.imshow(img) plt.show() ``` 此代码创建了一个空白图像,定义了多边形的顶点,使用`cv2.fillPoly()`函数填充多边形,并使用`matplotlib`显示结果 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值