2009-11-27 19 views
3

我試圖轉換從捕獲(網絡攝像機)拍攝的圖像拍攝的圖像,並做一些處理上他們OpenCV的,但我有困難的時候..的Python/OpenCV的:把從捕獲

當試圖將圖像轉換爲灰度,程序崩潰。 (Python.exe已停止工作)

這裏是我的代碼的主要片段:

newFrameImageGS = cv.CreateImage ((320, 240), cv.IPL_DEPTH_8U, 1) 

for i in range(0,5): 
    newFrameImage = cv.QueryFrame(ps3eye) 
    cv.CvtColor(newFrameImage,newFrameImageGS,cv.CV_BGR2GRAY) 
    golfSwing.append(newFrameImageGS) 

當我嘗試使用cvConvertScale我得到的斷言錯誤:

src.size() == dst.size() && src.channels() == dst.channels() 

這是有道理的,但我很困惑如何去把我的網絡攝像頭的輸入圖像轉換成可以被像cvUpdateMotionHistory()和cvCalcOpticalFlowLK()這樣的函數使用的圖像

有什麼想法?謝謝。

UPDATE:

我轉換到這個手動灰度圖像:

for row in range(0,newFrameImage.height): 
      for col in range(0,newFrameImage.width): 
       newFrameImageGS[row,col] = (newFrameImage8U[row,col][0] * 0.114 + # B 
              newFrameImage8U[row,col][1] * 0.587 + # G 
              newFrameImage8U[row,col][2] * 0.299) # R 

但這需要相當長一段時間..我仍然無法弄清楚,爲什麼cvCvtColor是造成程序崩潰。

回答

4

由於某些原因,CvtColor導致程序在圖像深度爲8位時崩潰。當我將它們轉換爲32位時,程序不再崩潰,一切似乎都正常。我不知道這是爲什麼,但至少現在它工作。

newFrameImage = cv.QueryFrame(ps3eye) 

newFrameImage32F = cv.CreateImage((320, 240), cv.IPL_DEPTH_32F, 3) 
cv.ConvertScale(newFrameImage,newFrameImage32F) 

newFrameImageGS_32F = cv.CreateImage ((320,240), cv.IPL_DEPTH_32F, 1) 
cv.CvtColor(newFrameImage32F,newFrameImageGS_32F,cv.CV_RGB2GRAY) 

newFrameImageGS = cv.CreateImage ((320,240), cv.IPL_DEPTH_8U, 1) 
cv.ConvertScale(newFrameImageGS_32F,newFrameImageGS) 
+2

謝謝Domenic(哈哈同名)。在遇到這個錯誤並花費數小時試圖解決它之後,我偶然發現了這個問題。 – 2010-05-29 03:33:32

+0

因爲你正在寫一個矩陣更大(1 float = 4字節,即32F = 4 * 8U)而崩潰了, – fabrizioM 2011-04-01 08:50:01

1

有一個常見的錯誤在這裏:

你正在創建的newFrameImageGS可變前循環單個圖像,然後覆蓋在迴路中,然後將其添加到列表中的內容。結果不會是你所期望的。該列表最後將包含對同一圖像實例的五個引用,因爲只有對象引用被附加到列表中,所以沒有這樣的對象副本。這張圖片將包含最後一幀,所以你得到了五幀,我想這不是你想要的。如果它不清楚,請查看Python教程。你可以通過將上面的代碼的第一行移動到for循環的主體來解決這個問題。如果固定上面會不會幫助你

另一種可能性:

CvtColor功能似乎是正確的轉換爲灰度,因爲它可以轉換成不同數目的通道。

根據this manualCvtColor函數需要一個與源相同數據類型的目標映像。請仔細檢查newFrameImage是否是IPL_DEPTH_8U圖片。

+0

確定。我試圖在循環中移動該語句,程序仍然崩潰。 我也檢查了newFrameImage的深度,它是8,所以應該也是正確的。 – Domenic 2009-11-27 18:04:06