gpt4 book ai didi

python - 如何更快地一次绘制数千个圆 openCv - (也许使用 GPU)

转载 作者:行者123 更新时间:2023-12-02 16:24:41 26 4
gpt4 key购买 nike

我需要在图像的给定区域(视频帧)上绘制数千个点。

使用循环是最简单的方法。

    while i < num:
x = random.randint(min_x, max_x)
y = random.randint(min_y, max_y)
//this if is to check the the random points are within the original shape
if cv2.pointPolygonTest(contour, (int(x), int(y)), False)==1:
cv2.circle(img, (int(x), int(y)), 2, color, -1)
i = i+1;

这个过程需要很长时间才能完成。

我怎样才能更有效地实现这一目标?

最佳答案

也许可以使用几个技巧来加速它:

尝试摆脱循环并矢量化您的操作。
您可以通过传递 size 来矢量化 (x, y) 点生成。至random.randint .如果过滤后它们不等于num ,您可以生成另一个集合。

而不是 pointPolygonTest ,也许你可以试试matplotlib.path.Path.contains_points它对点向量而不是单个点进行操作。

对于圆圈,一旦你过滤了所有的圆圈中心,创建一个全零图像来绘制你的圆圈,然后在这个图像中标记中心(再次,矢量化)。如果您想要彩色圆圈,则必须将像素值设置为每个 channel 的适当灰度级。然后使用具有所需半径的圆形结构元素进行扩张。对于小半径,这些圆圈应该没问题。或者,您也可以尝试高斯模糊,因为如果您将高斯与脉冲进行卷积,它会给您一个高斯,而对称高斯将类似于图像中的一个圆圈。如果您的圆圈大小相同,您也可以使用 filter2D 来执行此操作。如果膨胀结果不好,您可以创建自己的类似于您想要的圆圈的内核,然后将其与中心图像进行卷积。

从此 circles 复制所有非零像素图像到您的img使用 circles图像作为掩码。

创建圆圈的简单示例:

import numpy as np
import cv2 as cv

# create random centers for circles
img = np.random.randint(low=0, high=1000, size=(256, 256))
img = np.uint8(img < 1) * 255
# use Gaussian bluer to create cricles
img1 = cv.GaussianBlur(img, (9, 9), 3)*20
# use morphological dilation bluer to create cricles
se = cv.getStructuringElement(cv.MORPH_ELLIPSE, (5, 5))
img2 = cv.dilate(img, se)

中心:

centers

使用膨胀的圆圈:

dcircles

使用高斯模糊的圆:

gcircles

关于python - 如何更快地一次绘制数千个圆 openCv - (也许使用 GPU),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62163929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com