opencv imwrite 경로 문제

조회수 3494회
i = 2 #int
cv2.imwrite([r'C:\Users\Desktop\result (' + str(i) + ').png'], result) #result is 2D 16bit image

'result (2).png'라는 이름으로 이미지를 저장하고 싶습니다.

i 가 for문에 걸리기 때문에 imwrite를 for문 안에 넣어서 쓰려고 합니다.

그런데 위 코드로 실행시 오류를 일으킵니다.

도움 요청 드립니다.

cv2.imwrite(r'C:\Users\Desktop\result (' + str(i) + ').png', result)

로 해봐도 안됩니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 오류 메세지도 함께 올려주세요. 정영훈 2020.1.17 01:53

1 답변

  • 오류관련 메세지가 없어 정확히 알 수 없지만 오류는 separator 문자 때문일겁니다.

    c:\ 대신 c:/ 형태로 path separator 문자를 사용해야 합니다.

    그런데 파이썬 3.4 부터 pathlib 모듈이 제공됩니다.

    상대경로로 읽어드린후 절대 경로등을 알아내기 용이합니다.

    from pathlib import Path
    
    file_path = Path('sample.png')
    
    file_path.absolute().as_uri()
    Out[15]: 'file:///C:/Users/Administrator/aaaa/sample.png'
    

    잘못된 문자로 path를 지정해도 알아서 수정됩니다.

    from pathlib import Path
    
    file_path = Path('d:\sample.png')
    
    file_path.absolute().as_uri()
    Out[17]: 'file:///d:/sample.png'
    

    또 python 에서 string interpolation 은 굉장히 편합니다. 아래와 같이 f'' 를 사용하고 {} 사이에 변수나 수식를 넣으면 그대로 대입됩니다. 문자열을 일일이 붙일 필요 없습니다.

    for i in range(10):
        print(f'c:/{i * 2}.jpg')
    
    c:/0.jpg
    c:/2.jpg
    c:/4.jpg
    c:/6.jpg
    c:/8.jpg
    c:/10.jpg
    c:/12.jpg
    c:/14.jpg
    c:/16.jpg
    c:/18.jpg
    
    • ```f' '```에 str(i) 대신 {i}로 했는데 그냥 {i} 그대로 되네요...ㅠ 알 수 없는 사용자 2020.1.17 10:50
    • 파이썬 버전이 몇이에요? 정영훈 2020.1.17 11:11
    • 버전 3 입니다! 알 수 없는 사용자 2020.1.20 09:07
    • f 로 시작하는 방법은 3.6 이상부터 제공됩니다. 그 이하 버전이시면 'c:/{}.jpg'.format(i*2) 로 변경하세요. 정영훈 2020.1.20 10:08
    • 아 자세한 버전은 3.7입니다. 감사합니다. 알 수 없는 사용자 2020.1.20 11:56

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)