2017-07-26 2 views
1

J'essaie de lire un fichier png en utilisant opencv2, j'obtiens l'erreur suivante.C++: conflit libpng sur opencv

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 

J'ai sur mon système libpng 1.6.27. Opencv a été construit en utilisant la commande cmake -D BUILD_PNG=OFF /home/dpk/Desktop/opencv, pour éviter les conflits entre la bibliothèque d'opencv et celle de mon système.

Je compilez le programme qui a besoin de lire comme ci-dessous .png

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

La sortie de ldd sur le binaire donne ce qui suit pour libpng

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

Comment puis-je corriger cette erreur?

+0

Quand je regarde le répertoire 3rdparty dans le repo, même en 2010 il y avait une version de LibPNG plus récente que 1.2.53, donc il semblerait que ce n'est pas d'où cela vient. Avez-vous une autre copie d'OpenCV installée sur votre système, qu'elle utilise accidentellement? Est-ce que la sortie de 'pkg-config opencv --cflags --libs' a un sens? –

Répondre

1

A en juger par CMakeLists.txt d'OpenCV, vous deviez définir WITH_PNG=OFF, et non BUILD_PNG.

+0

Cela ne désactiverait-il pas complètement le support PNG dans OpenCV? Cela ne semble pas très souhaitable, vu que l'utilisateur veut "lire un fichier png en utilisant opencv2" ... –

+0

J'ai l'impression que c'est exactement ce que veut le demandeur. Bien sûr, vous ne pouvez pas prendre en charge le format PNG sans créer de lien vers une bibliothèque, mais je pense que asker utilise libpng directement dans son application, et non via OpenCV. – arrowd