2012-08-09 131 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因爲它們對於這樣的操作很好。