1. 程式人生 > >OpenCV學習筆記(一):OpenCV報錯“libpng error: IDAT: invalid distance too far back”

OpenCV學習筆記(一):OpenCV報錯“libpng error: IDAT: invalid distance too far back”

    這一陣子在學習用OpenCV的SVM+HOG進行行人捕捉,在學習網上原始碼的時候使用了OpenCV官方的訓練資料集,cv2的庫在read訓練資料的時候,有那麼幾個資料夾裡面的照片是沒辦法直接讀取,會報錯“libpng error: IDAT: invalid distance too far back”。

    這裡記一下關於這個報錯的一些解決方法:

    1.首先,本人的環境是opencv-contrib-python-3.4.3.18 + python3.6.3,後進過我測試opencv-contrib-python的這個庫在3.4以上的版本就報這個錯誤,論壇裡面的討論大致就是新的庫裡面使用的是libpng16,而讀取那個訓練集裡面的圖片得是老版的libpng12,論壇裡的一些大神給出瞭解決方案就是類似於重新編譯和配置OpenCV庫,但是這個對使用Python的我來說有點麻煩,所以我並沒有去嘗試。

    2.其次,剛剛也提到,這個就是版本過新的問題,所以3.4一下的庫就不會報這個錯誤,我另一個比較常用的版本3.3.0.10是親測沒有問題的。

    3.最後一種方法是最簡單也是最放心的,因為網上關於SVM+HOG的一些demo就是在3.4的庫以上實現的,所以最好還是用新的庫,寫一串小的程式碼,用PIL庫將圖片開啟,再另存一下就OK了。

    img=Image.open('../INRIAPerson/70X134H96/Test/pos/crop001501a.png')   

    img.save('../INRIAPerson/70X134H96/Test/pos/crop001501a.png')

    一整個資料夾的話也簡單,獲取資料夾下所有的圖片完整路徑,然後迴圈遍歷,開啟儲存替換,問題結局。