2012-03-26 14 views
6

Il seguente comando provoca un'eccezione.cv :: imwrite non ha trovato un writer per l'estensione specificata

cv::imwrite("test.jpg", diffImg); 

Ho anche provato numerose varianti su questo, compresi i percorsi assoluti e l'esportazione PNG. Ecco l'errore:

Exception at 0x75abd36f, code: 0xe06d7363: C++ exception, flags=0x1 (execution cannot be continued) in opencv_core231!cv::error

C:\slave\WinInstallerMegaPack\src\opencv\modules\highgui\src\loadsave.cpp:276: error: (-2) could not find a writer for the specified extension

Secondo this related thread mia installazione OpenCV corrente non supporta i formati di immagine che ho provato. Ma ho semplicemente scaricato il precompiled Windows framework come suggerito dal loro sito.

Come posso far funzionare l'esportazione JPG?

+0

Hai scaricato OpenCV-2.3.1-win-superpack.exe? Che Windows stai usando? 7 o 8? – karlphillip

+0

Ho scaricato il superpack v2.3.1 sul mio computer Windows 7. Ho anche provato la versione SVN (come mostrato sotto nei commenti) senza successo. – Pieter

risposta

6

sembra come se si stesse utilizzando un ambiente di esecuzione diverso da quello che si sta compilando. Puoi provare il seguente? Scarica Dipendente Walker e vai alla directory eseguibile e trascina il file .exe su Dipendente Walker (http://www.dependencywalker.com/). Ti mostrerà quali librerie di runtime sta utilizzando. Ora, assicurati di chiamare il programma con l'ambiente giusto. Se puoi, usa un'interfaccia a riga di comando per chiamare il programma, ti farà sentire più sicuro sapere da dove viene chiamato il codice, così puoi essere sicuro che i tuoi .dll copiati vengano chiamati.

Cordiali saluti, Daniel

+0

Beh, questo è interessante. I collegamenti [Qt Creator build] (http://i.imgur.com/Nzf0b.png) con * opencv_core231.dll * e [Visual Studio build] (http://i.imgur.com/OAxmj.png) collegamenti con * opencv_core231d.dll *. ([Nota sulle DLL.] (Http://stackoverflow.com/questions/9868963/cvimwrite-could-not-find-a-wrriter-for-the-specified-extension#comment12725201_9961035)) Qual è la differenza tra i normali e la DLL 'd' e cosa ci dice del problema? – Pieter

+0

quello con 'd' è la versione di debug che ti dà più informazioni di debug. L'altro senza 'd' è la versione di rilascio che significa che può generalmente funzionare più velocemente e ha dimensioni più piccole. Dovresti essere in grado di dire al compilatore quale DLL deve collegare il programma. E ovviamente, in Qt chiedi al compilatore di collegare la versione di rilascio mentre in VS hai collegato la versione di debug. – james

+0

Bingo, l'ho capito ... Ho bisogno di collegarmi con le DLL di debug di OpenCV quando eseguo una compilazione di debug altrimenti il ​​writeout fallirà inspiegabilmente. Grazie per la risposta vincente: la taglia è tua! – Pieter

0

È necessario ricompilare OpenCV e aggiungere il supporto al formato "jpeg". Crea il codice OpenCV lastest ed eseguire cmake:

svn co http://code.opencv.org/svn/opencv/trunk/opencv myopencvdir.svn/ 
cd myopencvdir.svn/ 
mkdir release 
cd release/ 
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. 

e verificare se libjpeg, libpng, sono supportati libtiff. In caso contrario, è necessario installarli e rieseguire il cmake.

Esempio di uscita CMake che mostra mezzi di supporto I/O:

-- Media I/O: 
--  ZLib:      TRUE 
--  JPEG:      TRUE 
--  PNG:      TRUE 
--  TIFF:      TRUE 
--  JPEG 2000:     TRUE 
--  OpenEXR:     YES 
+0

Questi sono comandi per linux. Puoi facilmente fare lo stesso su Windows usando l'interfaccia gui per cmake. – Eric

+0

Ho seguito i tuoi passaggi per compilare OpenCV manualmente. La versione che ho avuto è stata v2.3.3, che è più recente dell'ultima versione stabile per Windows (v2.3.1). Purtroppo ho ancora lo stesso problema ... Ecco la mia sezione * Media I/O *. Diceva * build * invece di * TRUE * ma ho pensato che questo non sarebbe stato un problema. http://pastebin.com/D2LkrWGR – Pieter

+0

Oh, e anche [questo] (http://i.imgur.com/nwq5T.png) mi sta succedendo. Snippet di codice [qui] (http://pastebin.com/9vAgPv93). – Pieter

0

Prima di provare qualsiasi altra cosa, essere sicuri che si sta configurando OpenCV e il progetto VS secondo le this answer, e essere attentamente non mescolare OpenCV rilasciare librerie con le librerie di debug.

Ci sono un paio di cose che si potrebbe provare:

  • Se siete su Windows 7 a 64 bit, si potrebbe desiderare di seguire this o this istruzioni.

  • ho notato un simile question on javacv wiki e questo è un'altra soluzione possibile:

  1. Head over to this page , follow the instructions to setup opencv 2.3.1 till Step 2. (Use 32-bit mode)

  2. Download the latest version of TBB for Windows from here .

  3. Extract the TBB zip file and copy all .dll files inside/bin/ia32/vc10 and all .dll files in/bin/ia32/vc10/irml into your C:\ OpenCV 2.3.1\ build\ x86\ vc10\ bin

farci sapere come hai fatto.

+0

Questo funziona per me in Visual Studio, ma sto utilizzando l'IDE Qt Creator con il compilatore MSVC2010. Ecco il mio percorso di inclusione e i flag di libreria associati: http://pastebin.com/jj7damtx Ho copiato tutte le DLL in * C: \ opencv \ build \ x86 \ vc10 \ bin * nella directory del programma che sto provando costruire. L'articolo diceva di rinominare la directory * opencv * in * OpenCV 2.3.1 * ma dal momento che VS2010 ha funzionato senza questo passo, suppongo che non sia stato d'intralcio anche a Qt Creator. – Pieter

+0

Solo per sapere dove è memorizzato tutto sul mio computer, ecco le variabili d'ambiente del programma di helper: OPENCV = C: \ opencv, PATH =% OPENCV% \ build \ x86 \ vc10 \ bin, LIB =% OPENCV% \ build \ x86 \ vc10 \ lib, INCLUDE =% OPENCV% \ build \ include. – Pieter

0

mi imbatto nello stesso errore di runtime "Errore OpenCV errore non specificato (non riusciva a trovare un produttore per l'estensione specificata)". Ho usato la stessa soluzione di Pieter, cioè nelle impostazioni del progetto -> linker -> Input -> Dipendenze adattative, ho specificato di usare la versione di debug delle librerie opencv per la codifica di debug di MSVS, e specificare di usare la versione versione delle librerie opencv per la configurazione della versione di MSVS. Quindi l'errore di runtime è scomparso.

-3

Basta menzionare il formato in cui si desidera salvare l'immagine come image.jpg, immagine.jpeg

cv2.imwrite ('image.jpg', immagine)

+0

^^ prova * non * a rispondere alle domande del 2012, per favore. inoltre, ovviamente, non hai letto la risposta "risolta". – berak

+0

Questa risposta utilizza anche i binding Python OpenCV quando la domanda è chiaramente C++.Devi essere più consapevole delle risposte che stai postando leggendo attentamente la domanda. – rayryeng

0

Sì, funziona per me.
Per eseguire il debug è sufficiente rimuovere thoes *.lib left *d.lib (Property Pages/Linker/Input/Additional Dependencies), basta copiare questi *d.lib:

9

Ho anche affrontato questo problema e ho osservato che questo problema verrà quando uso l'immagine senza alcuna estensione. come abc.jpg ma lo rinominano solo abc.

+1

Grazie a cose fisse! – floatingice

0

tranne per alcune soluzioni sopra, è necessario controllare il nome delle immagini. per me, la soluzione del mio problema è l'input sbagliato nei parametri Command in Debug. intendevo produrre un'immagine chiamata 1.png e questo è il secondo parametro in main(), e il terzo parametro di main() è un numero esadecimale come 0x3f e ho mescolato questi due parametri, il che significa che intendo produrre un'immagine con nome 0x3f. Questo è il motivo per cui si dice "non riuscivo a trovare uno scrittore". the screenshot of the wrong part of my problem mi dispiace per il cinese, ma è la proprietà -> Configura proprietà -> Debug -> Comando Parametri. :)

Problemi correlati