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)
로 해봐도 안됩니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
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
댓글 입력