Ipython cv2.imwrite() not saving image
<p>I have written a code in python opencv. I am trying to write the processed image back to disk but the image is not getting saved and it is not showing any error(runtime and compilation) The code is</p>

<pre><code>"""
Created on Wed Oct 19 18:07:34 2016

@author: Niladri
"""

import numpy as np  
import cv2  

if __name__ == '__main__':  
import sys  

img = cv2.imread('C:\Users\Niladri\Desktop\TexturesCom_LandscapeTropical0080_2_S.jpg')
if img is None:  
    print 'Failed to load image file:'
    sys.exit(1)  

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  
h, w = img.shape[:2]  

eigen = cv2.cornerEigenValsAndVecs(gray, 15, 3)  
eigen = eigen.reshape(h, w, 3, 2)  # [[e1, e2], v1, v2]  
#flow = eigen[:,:,2] 
iter_n = 10
sigma = 5
str_sigma = 3*sigma
blend = 0.5
img2 = img
for i in xrange(iter_n):  
    print i,  

    gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)  
    eigen = cv2.cornerEigenValsAndVecs(gray, str_sigma, 3)  
    eigen = eigen.reshape(h, w, 3, 2)  # [[e1, e2], v1, v2]  
    x, y = eigen[:,:,1,0], eigen[:,:,1,1] 
    print eigen

    gxx = cv2.Sobel(gray, cv2.CV_32F, 2, 0, ksize=sigma)  
    gxy = cv2.Sobel(gray, cv2.CV_32F, 1, 1, ksize=sigma)  
    gyy = cv2.Sobel(gray, cv2.CV_32F, 0, 2, ksize=sigma)  
    gvv = x*x*gxx + 2*x*y*gxy + y*y*gyy  
    m = gvv &lt; 0  

    ero = cv2.erode(img, None)  
    dil = cv2.dilate(img, None)  
    img1 = ero  
    img1[m] = dil[m]  
    img2 = np.uint8(img2*(1.0 - blend) + img1*blend)  
#print 'done'
cv2.imshow('dst_rt', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

#cv2.imwrite('C:\Users\Niladri\Desktop\leaf_image_shock_filtered.jpg', img2)    



for i in xrange(iter_n):  
    print i,  

    gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)  
    eigen = cv2.cornerEigenValsAndVecs(gray, str_sigma, 3)  
    eigen = eigen.reshape(h, w, 3, 2)  # [[e1, e2], v1, v2]  
    x, y = eigen[:,:,1,0], eigen[:,:,1,1] 
    print eigen

    gxx = cv2.Sobel(gray, cv2.CV_32F, 2, 0, ksize=sigma)  
    gxy = cv2.Sobel(gray, cv2.CV_32F, 1, 1, ksize=sigma)  
    gyy = cv2.Sobel(gray, cv2.CV_32F, 0, 2, ksize=sigma)  
    gvv = x*x*gxx + 2*x*y*gxy + y*y*gyy  
    m = gvv &lt; 0  

    ero = cv2.erode(img, None)  
    dil = cv2.dilate(img, None)  
    img1 = dil  
    img1[m] = ero[m]  
    img2 = np.uint8(img2*(1.0 - blend) + img1*blend)  
print 'done'

#cv2.imwrite('D:\IP\tropical_image_sig5.bmp', img2)    


cv2.imshow('dst_rt', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

#cv2.imshow('dst_rt', img2)    

cv2.imwrite('C:\Users\Niladri\Desktop\tropical_image_sig5.bmp', img2)
</code></pre>

<p>Can anyone please tell me why it is not working. cv2.imshow is working properly(as it is showing the correct image). 
Thanks and Regards
Niladri</p>

<p>As Jean suggested, the error is due to the \ being interpretted as an escape sequence. It is hence always safer to use <code>os.path.join()</code> as it is more cross platform and you need not worry about the escape sequence problem. For instance, in your case, you further need not worry about the first few arguments, as that is your home directory</p>

<pre><code>import os
cv2.imwrite(os.path.join(os.path.expanduser('~'),'Desktop','tropical_image_sig5.bmp'), img2)
</code></pre>

<p><code>os.path.expanduser('~')</code> will directly return your home directory.</p>

python opencv