## 함수 선언
## 메모리 할당 함수
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
댓글 영역