雷欧库珀 发表于 2021-4-8 20:12

求解释下这两个python自定义函数做了什么操作

import cv2

def sort_contours(cnts, method="left-to-right"):
    reverse = False
    i = 0

    if method == "right-to-left" or method == "bottom-to-top":
      reverse = True

    if method == "top-to-bottom" or method == "bottom-to-top":
      i = 1
    boundingBoxes = #用一个最小的矩形,把找到的形状包起来x,y,h,w
    (cnts, boundingBoxes) = zip(*sorted(zip(cnts, boundingBoxes),
                                        key=lambda b: b, reverse=reverse))

    return cnts, boundingBoxes
def resize(image, width=None, height=None, inter=cv2.INTER_AREA):
    dim = None
    (h, w) = image.shape[:2]
    if width is None and height is None:
      return image
    if width is None:
      r = height / float(h)
      dim = (int(w * r), height)
    else:
      r = width / float(w)
      dim = (width, int(h * r))
    resized = cv2.resize(image, dim, interpolation=inter)
    return resized

wsj0123 发表于 2021-4-8 20:15

顾名思义 第一个排序 第二个 重新定义大小

雷欧库珀 发表于 2021-4-8 20:29

wsj0123 发表于 2021-4-8 20:15
顾名思义 第一个排序 第二个 重新定义大小

啊这。。。就这样嘛?

jidesheng6 发表于 2021-4-8 21:10

看起来是识别到某种物体以后用框线标记出来吧,函数的名字也很清晰,就和楼上说的一样。

victornanka 发表于 2021-4-8 21:43

本帖最后由 victornanka 于 2021-4-8 21:51 编辑

挺简单的,不太懂opencv的我看函数都看懂了,

顾名思义
第一个是排序轮廓
先根据排序方法的参数看看是否reverse,然后在lambda里调用改顺序后排序再打包返回

第二个是重新调整图片大小
先判断给定的长宽合不合法
长宽都不指定就直接返回
给定其中一个就根据长或宽放缩

dleo 发表于 2021-4-8 22:07

# --------------------------------------------------------------------
# 【轮廓排序函数】
#      输入:轮廓,排序方式
#      输出:排序好的轮廓
#https://github.com/jrosebr1/imutils/blob/master/imutils/contours.py
# --------------------------------------------------------------------
def sort_contours(cnts, method="left-to-right"):
    # 初始化逆序标志和排序索引
    reverse = False
    i = 0

    # 是否需逆序处理
    if method == "right-to-left" or method == "bottom-to-top":
      reverse = True

    # 是否需要按照y坐标函数
    if method == "top-to-bottom" or method == "bottom-to-top":
      i = 1

    # 构造包围框列表,并从上到下对它们进行排序
    boundingBoxes =
    (cnts, boundingBoxes) = zip(*sorted(zip(cnts, boundingBoxes),key=lambda b: b, reverse=reverse))

    # 返回已排序的轮廓线和边框列表
    return cnts, boundingBoxes

也是从网上看到的

gentlespider 发表于 2021-4-9 10:16

6楼正解{:1_921:}
页: [1]
查看完整版本: 求解释下这两个python自定义函数做了什么操作