ContourFinding.py 文件源码

python
阅读 27 收藏 0 点赞 0 评论 0

项目:2017-Vision 作者: RoboticsTeam4904 项目源码 文件源码
def filterContoursFancy(contours, image=None):
    if len(contours) == 0:
        return []

    numContours = len(contours)
    areas = np.array([cv2.contourArea(contour) for contour in contours])

    boundingRects = [cv2.boundingRect(contour) for contour in contours]
    widths, heights, positions = boundingInfo(boundingRects)

    rotatedRects = [cv2.minAreaRect(contour) for contour in contours]
    if config.withOpenCV3:
        rotatedBoxes = [np.int0(cv2.boxPoints(rect)) for rect in rotatedRects]
    else:
        rotatedBoxes = [np.int0(cv2.cv.BoxPoints(rect)) for rect in rotatedRects]
    rotatedAreas = [cv2.contourArea(box) for box in rotatedBoxes]

    sizeScores = [size(area)for area in areas]
    ratioScores = ratios(widths, heights)
    rotationScores = [rotation(rect) for rect in rotatedRects]
    rectangularScores = [distToPolygon(contour, poly) for contour,poly in zip(contours, rotatedBoxes)]
    areaScores = polygonAreaDiff(areas, rotatedAreas)
    quadScores = [Quadrify(contour) for contour in contours]

    rectangularScores = np.divide(rectangularScores, widths)

    scores = np.array([sizeScores, ratioScores, rotationScores, rectangularScores, areaScores, quadScores])
    contourScores = np.dot(weights, scores)

    correctInds, incorrectInds = sortedInds(contourScores)
    correctContours = np.array(contours)[correctInds]

    if config.extra_debug:
        print "size, ratio, rotation, rectangular, area, quad"
        print "Weights:", weights
        print "Scores: ", contourScores
        print np.average(scores, axis=1)
        if len(incorrectInds) != 0:
            print "AVG, WORST", test(scores, correctInds, incorrectInds)
        for i in range(numContours):
            print "CONTOUR " + str(i)
            print np.multiply(scores[:, i], weights) #newWeights
            print contourScores[i]
            if image:
                img = copy.deepcopy(image)
                Printing.drawImage(img, contours[:i] + contours[i+1:], contours[i], False)
                Printing.display(img, "contour " + str(i), doResize=True)
            cv2.waitKey(0)
        cv2.destroyAllWindows()
    return correctContours
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号