Ort Lab

[Project_AF] 자동초점 현미경 개발기 (6) - 함수제작-1 [사진저장]

알 수 없는 사용자 2020. 3. 8. 23:50

(5)에서 제작한 GUI에 각 버튼에 해당하는 함수를 본격적으로 작성해야겠네요. 

 

정의해야할 함수는 다음과 같습니다.

save_data() - 카메라 화면을 ○.jpg로 저장

settop() - 현재위치를 제물대 최대높이로 설정

up_step() - 제물대 위로 이동

down_step() - 제물대 아래로 이동

 

AF() - 자동초점 실행기능

 

일단 가장 간단한 save_data()부터 빠르게 해보죠.

일단 캡쳐한 화면을 저정해야합니다.

def save_data():
    text = 'Image'
    ret, frame = cap.read()
    cv2.imwrite('./Save/%s.jpg'%text,frame)
    print('System >>> Data_save Success [%s.jpg]'%text)

이 함수를 실행시키면 이 파일(~.py)이 존재하는 디텍토리(같은폴더)상의 Save라는 이름의 폴더 내부에 Image.jpg가 저장됩니다.

 다만 저는 프로그램에서 지정된 파일명으로만 저장 되는것이 아닌 파일의 이름을 GUI자체에서 변경할 수 있도록 할 생각입니다.

저번에 제작한 GUI를 보시면.. 저기 SAVE as 옆에 image라고 적힌 칸이 있습니다.(image라고 적어논건 그냥 임의로 적어놓은것이고 원래는 비어있습니다.) 이 칸에 쓰여져있는 문자열을 저장할 사진의 이름으로 사용할 생각입니다. 

그렇기 위해서는 저기 적힌 문자열을 불러와야되는데.. 

save_name = ttk.Entry(window, width=15)
save_name.place(x=360,y=552)

저번에 작성한 GUI코드쪽의 Entry쪽입니다. 저 칸의 이름을 save_name으로 정의하였습니다. 

save_name이란 Entry에 적힌 문자열은 get()함수로 불러올수 있는데요

 

text = save_name.get()

 

이런식으로 불러올 수 있습니다.

이를 코드에 적용하면..

def save_data(): #캡쳐해서 파일 저장. 구현끝
    ret, frame = cap.read()
    text = save_name.get()
    cv2.imwrite('./Save/%s.jpg'%text,frame)
    cv2.imshow('image',frame)
    print('System >>> Data_save Success [%s.jpg]'%text)

이렇습니다. 

실행시켜보면..

빈칸에 입력한 testImage가 그대로 testImage.jpg로 저장됩니다.