Sofía, parte de este gran equipo, nos hizo el favor de redactar esta sección ya que conoce perfectamente este tema.
Solución:
Como regla general y absoluta, Ud. tener para proteger sus cadenas de ruta de Windows (que contienen barras invertidas) con r
prefix o se interpretan algunos caracteres (por ejemplo: n,b,v,x
aaaay t
lista completa aquí):
entonces al hacer esto:
cv2.imwrite('C:UsersNiladriDesktoptropical_image_sig5.bmp', img2)
estás tratando de guardar en C:UsersNiladriDesktop
Y lo molesto con imread
y imwrite
es que esas funciones no generan excepciones en los errores, sino que fallan en silencio. imwrite
devoluciones False
>>> cv2.imread("D:/nonexisting.jpg") # this returns None, no error
>>> s = cv2.imread("D:/sloth_book.jpg") # this works
>>> s
array([[[250, 250, 250],
[246, 246, 246],
[255, 255, 255],
...,
>>> cv2.imwrite("inexistent_dir/file.jpg",s) # dir doesn't exist, write fails
False
Por lo tanto, debe verificar el valor de retorno de esas funciones.
Hacer esto:
if not cv2.imwrite(r'C:UsersNiladriDesktoptropical_image_sig5.bmp', img2):
raise Exception("Could not write image")
Nota: la lectura funciona bien porque las letras mayúsculas “escapadas” no tienen un significado particular en python 2 (U
y N
tener un significado en python 3 por lo que no habría funcionado)
Y si hay un error, el programa ahora se queja en voz alta.
Como sugirió Jean, el error se debe a que se interpreta como una secuencia de escape. Por lo tanto, siempre es más seguro usar os.path.join()
ya que es más multiplataforma y no necesita preocuparse por el problema de la secuencia de escape. Por ejemplo, en su caso, no necesita preocuparse por los primeros argumentos, ya que ese es su directorio de inicio
import os
cv2.imwrite(os.path.join(os.path.expanduser('~'),'Desktop','tropical_image_sig5.bmp'), img2)
os.path.expanduser('~')
devolverá directamente su directorio de inicio.
Puntuaciones y reseñas
Nos puedes añadir valor a nuestra información añadiendo tu experiencia en los comentarios.