11
votes

OpenCV - Spécifiez le format lors de l'écriture de l'image sur fichier (cv2.imwrite)

Je souhaite enregistrer une image à l'aide de imwrite d'OpenCV '/ code> sans aucune extension. Je sais que le format image dans cv2.imwrite code> est choisi en fonction du nom de fichier code> code>. Existe-t-il un moyen de spécifier le format de compression tout en appelant la fonction ou devrais-je renommer le fichier une fois créé?

cv2.imwrite(filename, img)
[Out]: /home/travis/miniconda/conda-bld/work/opencv-3.1.0/modules/imgcodecs/src/loadsave.cpp:459: error: (-2) could not find a writer for the specified extension in function imwrite_


0 commentaires

3 Réponses :


-2
votes

Vous pouvez concaténer la chaîne de nom de fichier avec une chaîne qui spécifie uniquement l'extension tout en appelant la fonction.


3 commentaires

Comme dans cv2.imwrite (nom de fichier + '.jpg', img) ? L'image serait toujours enregistrée comme FileName.jpg non? Et je devrais le renommer à nouveau?


Vous ne pouvez pas convertir une image d'une extension à une autre simplement en renommant le fichier, vous devez choisir de choisir l'extension lorsque vous appelez la fonction CV2.Imwrite ou en faisant ceci: IMG = CV.IMREAD ('1.PNG') CV. imwrite ('01 ..jpg ', img) comme exemple


Je ne veux pas convertir les extensions d'image / les formats de compression. Je veux avoir un nom de fichier image sans aucune extension et je souhaite spécifier le format de compression lors de l'écriture de l'image sur le disque.



4
votes

Je pense qu'il n'est pas possible de spécifier la compression d'une image tout en le sauveant sans extension. Je recommanderais de l'enregistrer avec une extension puis d'utiliser os.rnerame () : xxx

espère que cela aide!


1 commentaires

La motivation est que nous pouvons avec succès lire un fichier image sans extension, mais nous allons échoue dans l'enregistrement en utilisant le même nom. Lecture d'une image, le traiter et l'enregistrer en utilisant le même nom dans les autres répertoires est une exigence commune, à mon humble avis.



1
votes

Je ne comprends pas votre motivation pour ce faire, mais si vous voulez écrire un JPEG sur le disque sans le .jpg code> extension ou un fichier PNG sans le .png Code> Extension, vous pouvez simplement faire le codage sur un tampon de mémoire, puis écrivez-le sur le disque.

Donc, si je charge une image comme ceci: P>

success, buffer = cv2.imencode(".jpg",im)
buffer.tofile('ExtensionlessFile') 


0 commentaires