2017-07-26 50 views
1

我想讀取一個PNG文件使用opencv2,我得到以下錯誤。C + +:在opencv libpng衝突

libpng warning: Application built with libpng-1.2.53 but running with 1.6.27 
OpenCV Error: Assertion failed (dsize.area() > 0 || (inv_scale_x > 0 && inv_scale_y > 0)) in resize, file /home/dpk/Desktop/opencv/opencv/modules/imgproc/src/imgwarp.cpp, line 3484 

我在我的系統上有libpng 1.6.27。 Opencv是使用命令cmake -D BUILD_PNG=OFF /home/dpk/Desktop/opencv構建的,以避免opencv庫與我的系統庫之間發生衝突。

我編譯它需要讀取PNG如下

g++ preProcess.cpp -I/usr/local/include/libpng16 `pkg-config opencv --cflags --libs` -o preProcess 

程序的ldd在二進制輸出給我怎樣才能解決這個錯誤了libpng

libpng16.so.16 => /usr/local/lib/libpng16.so.16 

以下?

+0

當我查看回購協議中的3rdparty目錄時,即使在2010年,LibPNG的版本也比1.2.53更新,所以看起來並不是那裏出現的。您是否碰巧在系統上安裝了OpenCV的其他副本,它是否意外使用? 'pkg-config opencv --cflags --libs'的輸出是否有意義? –

回答

1

從OpenCV的CMakeLists.txt判斷,您必須設置WITH_PNG=OFF而不是BUILD_PNG

+0

這不會完全禁用OpenCV中的PNG支持嗎?這似乎不是很可取,考慮到用戶想「使用opencv2讀取png文件」... –

+0

我有印象,它正是ASK的要求。當然,如果不鏈接到庫,就不能支持PNG,但我認爲asker直接在他的應用中使用libpng,而不是通過OpenCV。 – arrowd