如何将QImage裁剪为其不透明区域?

4

如果我有一张带有alpha通道的QImage,如何创建一个新的QImage,该图像被裁剪为不透明区域的边界框?


图片边缘是否有透明块? - Oleh Prypin
不,它并不是。但是不透明区域的边界不是矩形的(但它是封闭的)。 - Daniel
2个回答

1
我在 Stack Overflow 上找到了另一个(使用 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))

但如果有更好/更快的方法来做这件事,那就太棒了。


是的,没错。你的函数很好用。也许只需要将它翻译成C++就足够了... - patrickkidd

1
你想要实现的是图像处理的一部分,这不是 QImage 的标准操作。你需要遍历像素并计算边界框。我建议你使用 cv 库,因为它们非常适合这样的操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接