2012-08-30 108 views
0

我正在做一些使用Python的專業圖像分析,特別是Numpy,PIL和OpenCV。但是,我對PIL的性能不太滿意,所以我想將這些代碼部分移植到OpenCV。如果需要,這也可以讓代碼稍後移植到C/C++中。將Python PIL代碼翻譯爲Python OpenCV

無論如何,我在移植我的部分代碼時遇到了一些麻煩,並且會喜歡這裏的一些幫助。具體來說,我需要更改的部分是:

功能:找到圖像中像素最多的紅色,綠色和藍色(R,G,B)強度。目前通過直方圖完成。輸入圖像採用Python PIL圖像的形式。

def bgcalcRGB(img): 

    hist = img.histogram() 

    R=0;G=0;B=0; avgR=0.; avgG=0.; avgB=0.; Rmax=175+15; Rmin=175-15; 
    Gmax=160+15; Gmin=160-15; Bmax=150+15; Bmin=150-15; 

    for x in range(Rmin,Rmax,1): 
     if hist[x] > avgR: avgR = hist[x]; R = x 
    for x in range(256+Gmin,Gmax+256,1): 
     if hist[x] > avgG: avgG = hist[x]; G = x - 256 
    for x in range(256*2+Bmin,Bmax+256*2,1): 
     if hist[x] > avgB: avgB = hist[x]; B = x - 256*2 
    return (R,G,B) 

功能:用作RGB channals的同時閾值。如果某個RGB像素在一定範圍內(獨立於R,G和B),則它會呈現白色。如果不是,則將其丟棄並染成黑色。輸入圖像是一個Python PIL圖像。

def mask(low, high): 
    return [255 if low <= x <= high else 0 for x in range(0, 256)] 

img1 = img.point(mask(val1-uc1,val1+uc1)+mask(val2-uc2,val2+uc2)+mask(val3-uc2,val2+uc2)).convert('L').point([0]*255+[255]).convert('RGB') 

所以我需要的是翻譯上面的代碼只用OpenCV的,或至少不使用Python PIL幫助。

謝謝!

+0

問題是什麼? – Aesthete

+0

哦,是的,對不起。這基本上是一個幫助將上面的代碼翻譯成僅在Python中使用OpenCV的請求。 – Bjarke

回答

1

你應該嘗試SimpleCV

它是基於Python的OpenCV的綁定,SciPy的,numpy的,pygame的,PIL。 SimpleCV非常容易學習和實施。

img = Image("filename.jpg")將以BGR形式加載圖像。

要訪問X,圖像Y的像素,color = img[x, y]

得到cv2.cv.iplimage =>img.getBitmap()

SimpleCV集成SciPy的和numpy的快速計算和機器學習moduels。它包括pygame顯示。

要顯示圖像,img.show()

它還包括各種tracknig特徵(盧卡斯奏跟蹤,CAMSHIFT等),關鍵點匹配的特徵(SURF,SIFT,ASIFT,STAR,ORB,MSER等),和許多其他的blob功能。

基本圖像處理和圖像數據提取可以很容易地使用SimpleCV完成。