Python 从现有列表创建新列表

标签 python list computer-vision contour

我想从现有的轮廓列表创建四边形轮廓列表。我对编码相当陌生,所以请耐心等待我尝试的代码,我将用它来演示目标。

#Get Contours from an Image
(contours,hierarchy) = cv2.findContours(image,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

#Work in progress
def ListQuads(contours,c=0):
    l = len(contours)  #Gets total number of contours
    while l > c:
        peri = cv2.arcLength(c, True)
        approx = cv2.approxPolyDP(c, 0.02 * peri, True)
        if len(approx) == 4:
            Quads[c] = approx
            c = c + 1
    return Quads

Quads = ListQuads(contours)

最佳答案

在 Python 中通常完成此操作的方式是使用推导式:

approximations = [cv2.approxPolyDP(c, 0.02 * cv2.arcLength(c, True), True)
                  for c in contours]
quads = [apx for apx in approximations if len(apx) == 4]

您甚至可以通过在 quads 理解中嵌套近似值,在单个语句中获得此结果,但这不会提高可读性。

只有当读取变得更容易时,在 Python 中保存写入才被认为是可以的。

请注意,您还可以使用生成器表达式来代替第一个表达式的推导式,方法是使用正则括号 (...) 而不是方括号 [...] 周围。

在这种情况下,其含义是使近似值的计算变得“惰性”,如果原始列表很长,则可以节省内存。

关于Python 从现有列表创建新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31642017/

相关文章:

python - 在 Tkinter 中对对象进行动画处理以沿圆形路径移动

python - python 3.7 中 .append 函数的自动化

python - TensorFlow:如果我在图形中处理二次计算,是否会消耗更多内存?

c# - 为什么调用此列表方法会返回不可访问错误?

python - 从单词列表创建字谜列表

python - 使用 Python OpenCV 从车牌图像中提取数字和字母

python - 图像的光谱哈希与汉明距离匹配

javascript - Django:更改 javascript 函数内的字体颜色

python - 如何使用 Python Tkinter 使按钮打开特定的 .csv 文件?

python - 我的 ping 扫描程序无法运行。我究竟做错了什么?