상세 컨텐츠

본문 제목

03-04 텍스트 포토샵

PYTHON/미니프로젝트1 Photoshop

by yeongs 2020. 9. 21. 14:40

본문

## 함수 선언
## 메모리 할당 함수
import numpy

def malloc(h,w):
    retImage =[]
    tmp = []
    for _ in range(h):
        tmp = []
        for _ in range(w):
            tmp.append(0)
        retImage.append(tmp)
    return retImage

def openImage():
    global image,height ,width ,filename
    #파일 열기
    rfp = open(filename, 'rb')  # 512*512 크기
    for i in range(height):
        for k in range(width):
            image[i][k] = int(ord(rfp.read(1)))
    # 파일 종료
    rfp.close()

def displayImage():
    global image, height, width, filename
    #이미지 츌룍
    for i in range(5):
        for k in range(5):
            print("%3d " % (image[i][k]), end=" ")
        print()
    print("=================================================================")
### 영상처리 함수 모음 ###
def addImage() :
    global image, height, width, filename
    value = int(input("밝게할 값-->"))
    for i in range(height):
        for k in range(width):
            if (image[i][k] + value > 255):
                image[i][k] = 255
            else :
                image[i][k] += value
    displayImage()

def subImage() :
    global image, height, width, filename
    value = int(input("어둡게 값-->"))
    for i in range(height):
        for k in range(width):
            if (image[i][k] - value < 0):
                image[i][k] = 0
            else :
                image[i][k] -= value
    displayImage()

def converImage() :
    global image, height, width, filename
    for i in range(height):
        for k in range(width):
            image[i][k] = -(image[i][k]) +255
    displayImage()

def bin127Image() :
    global image, height, width, filename
    for i in range(height):
        for k in range(width):
            if(image[i][k]>127):
                image[i][k] = 1
            else:
                image[i][k] = 0
    displayImage()

def binAvrImage() :
    global image, height, width, filename
    #평균값 구하기
    avr , hap =0,0
    for i in range(height):
        for k in range(width):
            hap+=image[i][k]
    avr = hap/ (height*width)

    for i in range(height):
        for k in range(width):
            if(image[i][k]>avr):
                image[i][k] = 1
            else:
                image[i][k] = 0
    displayImage()

def binMidImage():
    global image, height, width, filename

    # 중위수 구하기
    tmp = []
    for i in range(height):
        for k in range(width):
            tmp= image[i][k]
    mid = numpy.median(tmp)

    print(mid)
    for i in range(height):
        for k in range(width):
            if (image[i][k] > mid):
                image[i][k] = 1
            else:
                image[i][k] = 0
    displayImage()

def mirrImage() :
    global image, height, width, filename, tmpimage
    # tmpimage 초기화

    tmp = []
    for _ in range(height):
        tmp = []
        for _ in range(width):
            tmp.append(0)
        tmpimage.append(tmp)
    # 좌우 미러링
    for i in range(height):
        for k in range(width):
            if(width%2 ==0): # 짝수이면 상관없음
                tmpimage[i][k] = image[i][width - 1 - k]
            else: # 홀수일 경우 중간값은 미러하면 안됨
                if(k == (width-1)/2):
                    tmpimage[i][k] = image[i][k]
                else:
                    tmpimage[i][k] = image[i][width - 1 - k]
    image = tmpimage
    displayImage()

def exp2Image():
    global image, height, width, filename, tmpimage , EXPAND_NUMBER

    # tmpimage 초기화
    tmp = []
    for _ in range(height*EXPAND_NUMBER):
        tmp = []
        for _ in range(width*EXPAND_NUMBER):
            tmp.append(0)
        tmpimage.append(tmp)
    # 2배 확대
    for i in range(height):
        for k in range(width):
            for a in range(EXPAND_NUMBER):
                for b in range(EXPAND_NUMBER):
                    tmpimage[EXPAND_NUMBER * i + a][EXPAND_NUMBER * k + b] = image[i][k]
    image = tmpimage
    displayImage()

## 전역 변수부
image=[]
tmpimage=[]
height , width =0,0
filename ="C:/images/Etc_Raw(squre)/512/"
EXPAND_NUMBER=2

## 메인 코드부
if __name__ == '__main__' :
    ## 파일 선택
    tmpFname = input('파일명--->')
    filename += tmpFname + ".raw"
    ## 파일의 높이x 폭
    height =width = 512
    ## 메모리 할당
    image =malloc(height,width)
    ## 파일 --> 메모리 로딩
    openImage()
    ## 원본 이미지 보기
    displayImage()

    ## 메뉴 선택하기 ##
    menu = -1
    while menu != 0:
        print("영상처리 : (1)밝게 (2)어둡게 (3)반전")
        print("영상처리 : (4)2진화 127 (5)이진화 평균값 (6)이진화 중위수")
        print("영상처리 : (7)좌우 미러링 (8)2배 축소 (9)2배 확대")
        print("영상처리 : (10)90도 회전 (11)45도 회전 (0)종료")
        menu =int(input('입력 -->'))
        if menu == 1 : #(1)밝게
            addImage()
        elif menu ==2 : #(2)어둡게
            subImage()
        elif menu ==3 : #(3)반전
            converImage()
        elif menu ==4 : # 이진화 127
            bin127Image()
        elif menu ==5 :
            binAvrImage()
        elif menu ==6 :
            binMidImage()
        elif menu ==7 :
            mirrImage()
        elif menu ==8 :
            pass
        elif menu ==9 :
            exp2Image()
        elif menu ==0 :
            print("프로그램 끝!")
            break

관련글 더보기

댓글 영역