Как обрезать QImage в его непрозрачной области?

Если у меня есть QImage с альфа-каналом, как я могу создать новый QImage, который будет обрезан до ограничительной рамки непрозрачной области?

2 ответа

То, что вы пытаетесь достичь, является частью обработки изображений. Что не является стандартной операцией в QImage. Вы должны пройти через пиксели и вычислить свой ограничивающий прямоугольник. Я бы посоветовал вам использовать cv libs, потому что они хороши для таких операций.

Я нашел другой ответ SO (в C++), который делает это:

Есть ли в Qt способ найти ограничительную рамку изображения?

def bbox(p):
    bounding-box-of-an-image
    l = p.width()
    t = p.height()
    r = 0
    b = 0

    for y in range(p.height()):
        rowFilled = False
        for x in range(p.width()):
            if qAlpha(p.pixel(x, y)):
                rowFilled = True
                r = max(r, x)
                if l > x:
                    l = x
        if rowFilled:
            t = min(t, y)
            b = y
    return QRect(QPoint(l, t), QPoint(r, b))

но было бы здорово, если бы был лучший / более быстрый способ сделать это.

Другие вопросы по тегам