2012-08-09 124 views
3

如果我有一个带alpha通道的QImage,我怎样才能创建一个新的QImage被剪裁到不透明区域的边界框?如何将QImage裁剪到其不透明区域?

+0

图像在“边框”旁边是否有透明的图块? – 2012-08-09 17:23:35

+0

不,它没有。但不透明区域的边界不是矩形(但是它是封闭的)。 – dmd 2012-08-10 18:09:38

回答

1

我发现了另一个(在C++),这是否SO回答:

Does Qt have a way to find bounding box of an image?

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)) 

但如果有这样做更好/更快的方式,将是巨大的。

+0

是的,它会。你的功能很好。也许只要翻译成C++就足够了... – patrickkidd 2017-03-17 04:23:49

1

你试图实现的是图像处理的一部分。这不是QImage中的标准操作。您必须遍历像素并计算边界框。 我建议你使用cv libs因为它们对于这样的操作很好。