2023/집체교육

0626 1주 1일_Python 1차 강의

notty 2023. 6. 28. 07:29
728x90

-코딩 == 체력

-특정 언어에 치우치지 않는 코딩을 하는것이 먹고 살기에 유리하다

-자신의 기준을 코드 전체에 고르게 적용

-함수부 --> 변수 --> 메인 순으로 코드를 전개하면 보기에도 좋

 

python 기초 문법

-print()

-for

-while

-if

-2d-array

image = []
tmp_arr = []
ROW = COL = int(input("숫자 써"))

#image array에 ROWxCOL 0 matrix 만들기 --> 메모리할당, 값을 초기화
for i in range(ROW):
	for k in range(COL):
    	tmp_arr.append(0)
    image.append(tmp_arr)
    tmp_arr = []

#파일에서 메모리로 로딩
for i in range(ROW):
	for k in range(COL):
    	pixel = random.randint(0,255) #0~255으 랜덤한 값으로 로딩
        image[i][k] = pixel

파이썬에서는 그냥 빈 리스트에 직접 추가해도 되지만 프로그래밍을 범용적으로 공부하려면 다른 언어와 비슷하게 구현하는것이 좋다. 따라서 메모리 할당, 값을 초기화 --> 파일 로드

 

-영상처리

1) 영상을 밝게하기

def brighter_50():
    for i in range(ROW):
    	for k in range(COL):
        	if (image[i][k] + 50 > 255):
            	image[i][k] = 255
            else:
            	image[i][k] += 50

변수: ROW(전), COL(전), imag(전), i(지), j(지)

설명: 이중 for문을 통해 2차 배열 영상의 픽셀에 접근한다. 전체 픽셀에 대해서 50을 더한 값을 적용시킨다. 단, if 문을 사용하여 픽셀+50의 값이 255보다 크다면 표현 범위를 넘어서 오버플로우 발생하므로 이 경우 255로 변경해준다. 그렇지 않으면 50을 더해준 값을 image[i][k]에 적용시킨다. 

 

2)영상을 어둡게 하기

def darker_50():
    for i in range(ROW):
    	for k in range(COL):
            if (image[i][k]-50 < 0):
            	image[i][k] = 0
            else:
            	image[i][k] -= 50

변수: ROW(전), COL(전), imag(전), i(지), j(지)

**주의: image는 전역변수이므로 이런 방식으로 사용한다면 결과값이 누적되어서 사용될것이다. 만약 이 경우도 밝게를 거치고 온다면 모든 픽셀에 50이 더해져 있는 상태에서 시작.

설명: 이중 for문으로 픽셀에 접근한다. 50 뺀 값이 0보다 작으면 안돼서 이 경우 0으로 대치시킨다. 아닌 경우 그냥 50 뺀다. 

 

3) 이진영상

TH = 170 #0~255 중간쯤
def binary():
    for i i range(ROW):
        for j in range(COL):
            if (image[i][k] >= TH):
                image[i][k] = 255
            else:
                image[i][k] = 0

변수: ROW(전), COL(전), imag(전), TH(전), i(지), j(지) 

설명: 임계값 TH를 설정하여 픽셀이 그 값 이상이면 255로 그렇지 않으면 0으로 바꾼다. TH값은 평균이나 중앙값 등과 같은 값을 사용하여 주어진 픽셀에 알맞는 임계치를 찾는 것이 좋다. 하지만 평균은 이상치에 민감하기 떄문에 중앙값을 추천

 

-파일 처리

file_name = 'FILE_PATH'
file_size = os.path.getsize(file_name)
height = width = int(math.sqrt(file_size))

image = [[0 for _ in range(width)]for _in range(height)]

rfp = open(file_name. 'rb')
for i in range(height):
    for k in range(width):
        image[i][k] = ord(rfp.read(1)) 
rfp.close()

변수:

-file_name: 불러올 파일의 경로

-file_size: getsize()로 얻어온 파일의 크기(heught와 width가 곱해진 형태)

-height, width: 파일의 높이 너비(==(file_size)**(1/2))

-image: 파일 내용 로드하기 메모리 할당, 초기화

-open(), close(): 파일을 열고 닫기, 파일 로딩이 끝나면 바드시 닫아준다

설명: file_name을 읽어와파일을 오픈한 후 값들을 초기화시킨 배열에 1byte씩 읽어온다. 다 하면 rfp.close()통하여 파일을 닫는다. 

 

-GUI

1)윈도우

from tkinter import *
from tkinter import messagebox

window= Tk()
window.title('title')
window.geometry('400x500)

window.mainloop()

설명: tkinter을 사용하여 GUI구성. 400x500사이즈의 윈도우를 생성하고 그 윈도우의 타이틀은 'title'이다

 

2) 버튼

from tkinter import *
from tkinter import messagebox

window= Tk()
window.title('title')
window.geometry('400x500)

btn1 = Button(window, text = 'click here')
btn1.pack()

window.mainloop()

설명: Button함수를 사용하여 window내에 버튼을 생성한다. btn.pack()을 사용하여 윈도우에 표시

 

3) 글

from tkinter import *
from tkinter import messagebox

window= Tk()
window.title('title')
window.geometry('400x500)

label1 = Label(window, text = '글씨'
label1.pack()

window.mainloop()

설명: Label을 사용하여 window에 글씨를 표시한다. pack()을 사용하지 않으면 윈도우에 생성되지 않는다. 

728x90
반응형

'2023 > 집체교육' 카테고리의 다른 글

0626 1주 1일_알고리즘 특강 OT  (2) 2023.06.28