반응형

 

무한루프  while 함수

 

while()문은 무한루프이며, ( )내의 조건이 만족할 때까지 영원히 돈다.

sleep함수는 time라이브러리에 내장된 함수로 괄호에 초단위를 넣는다. 시스템 지연기능

'''
    sleep() 함수로 1초간 지연.
    while문으로 5번 반복 print문 반복
'''

import time

loopCount = 0

while(loopCount < 5):
    print("반복문을 처리하는 while 예약어가 필요하다.")
    time.sleep(1)
    loopCount = loopCount + 1

(결과)

 

 

for 함수, 

 

반복한수로 괄호 내 조건이 만족할 때까지 돈다.

'''
    sleep() 함수로 1초간 지연.
    
    for(초기값,마지막값,증분값)
    초기값이 증분값만큼 증가하여 마지막 값에 도달 할 때 끝남.
    증분값은 옵션으로 입력을 하지 않을시 1이 default
    
'''

import time

loopCount = 0

for loopCount1 in range(0, 10, 2):
    print(time.time())
    print(loopCount1)
    time.sleep(1)

(결과)

 

아래는 해당 코드가 시작부터 끝까지 총 걸린시간 측정 예제

# 파이썬 언어로 작성한 알고리즘의 성능분석을 위해
# 실행시간을 측정 예제.

loopCount = 0
startPoint = time.time()

while (loopCount < 15 ):
    print("반복문 처리하는 while 예약어 필요")
    loopCount = loopCount + 1

finishPoint = time.time()

print('\n',"처리시간은: ",finishPoint - startPoint, "초 입니다.")

 

<시스템의 무한루프에 빠지는 것을 방지하기 위한 예외처리>

https://ansan-survivor.tistory.com/929

 

[Python] 무한루프에 빠졌을 때 빠져나갈 수 있는 예외처리 만들기

파이썬 코드가 예상한데로 잘 작동하면 좋지만, 때로는 어떤 로직적인 실수로 무한루프에 빠져 시스템이 먹통이 되는 경우가 발생 할 수 있다. 그 경우에는 if문을 잘 활용해서 특정 코드가 들어

ansan-survivor.tistory.com

 

반응형
반응형

아래 코드는 text.txt 파일을 복사 및 폴더에 복사, 이동 코드이다.

절대경로 사용 및 상대경로 사용

import shutil

############## 복사 #######################

# 현재 디렉터리에서 파일 복사하기 후 다른 폴더로 저장
shutil.copy('./test.txt', './copyfolder')   # test.txt 파일을 -> copyfolder 라는 폴더로 복사후 이동.

# 절대경로를 이용해 저장하기
shutil.copy('C:/Users/jay/PycharmProjects/pythonProject1/test.txt', 'C:/Users/jay/PycharmProjects/pythonProject1/copyfolder')   # 절대경로에있는 파일 -> 절대경로 폴더로 저장

# 같은 디렉터리에서 파일 사본 만들기. (파일명이 서로 같으면 오류 발생)
shutil.copy('./test.txt', './newcopyTest.txt')  # test.txt 파일의 내용물이 -> newcopyTest.txt 라는 이름으로 그대로 복사.

# 전체 디렉터리(폴더)를 전체 복사
shutil.copytree('./copyfolder', './copyfolder_copy')    # copyfolder의 모든 내용물과 함께, copyfolder_copy에 모든것이 그대로 복사.

################# 이동 ##########################

# test.txt 파일을  movetest 라는 폴더로 이동
shutil.move('./test.txt', './movetest')

반응형

 

<파일에 문자를 입력하거나 문자를 불러오거나 그림파일을 불러오는 방법은 아래 참고>

https://ansan-survivor.tistory.com/925

 

[Python] 파이썬 파일 입출력하기, 파일 불러오기, 파일 읽기 쓰기, 파일에 글 추가하기

파일을 열고 한줄씩 읽기. 현재 경로에서 abc.txt 파일을 read모드로 열고 해당 instance를 print하면 한줄씩 프린트할 수 있다. #파일 불러와서 읽기. testFile = open('.\\abc.txt','r') # 'r' read의 약자, 'rb..

ansan-survivor.tistory.com

 

반응형
반응형

아래 파일을 읽고 특정 문자열만 골라서 삭제한다.

'''
    파일을 read 하여 리스트에 저장하고, 그 리스트에 있는 문자열을 골라서 삭제
'''

with open("./test.txt", "r") as f:
    lines = f.readlines()
with open("./test.txt", "w") as f:
    for line in lines:
        if line.strip("\n") != "ich liebe dich so wie du mich":     # <= 이 문자열만 골라서 삭제
            f.write(line)

(결과)

반응형

코드 실행 후 파일은 아래와 같이 변한다.

 

 

반응형
반응형

 

아래 코드 쓰기모드에서 파일을 만들어 쓰고, 읽기모드에서 해당 text파일을 읽어들인다.

########## 쓰기모드 #################

# 현재 디렉터리에 텍스트 파일 생성하기. 쓰기모드 열기
f = open("newfile.txt", 'w')

# 뒤에 계속 이어서 써짐.
data = "안녕"
f.write(data)   # data를 파일에 쓰기
data = "하세요\n"
f.write(data)   # data를 파일에 쓰기

# 개행으로 줄을 나눔
data = "안녕\n"
f.write(data)   # data를 파일에 쓰기
data = "하세요"
f.write(data)   # data를 파일에 쓰기
f.close() # 쓰기모드 닫기

########## 읽기 모드 ###############

# 현재 디렉터리에 텍스트파일을 읽기
f = open("newfile.txt", 'r')

# 한줄씩 계속 읽기 줄만 읽기, 출력
line = f.readline()
print(line)
line = f.readline()
print(line)
line = f.readline()
print(line)
f.close() # 읽기모드 닫기

# 현재 디렉터리에 텍스트파일을 읽기
f = open("newfile.txt", 'r')

# 한번에 모든 라인 읽기
while True:
    line = f.readline()
    if not line:        # 라인을 계속 읽고 출력하다가  line이 없으면 break, None을 return.
        break
    print(line)
f.close() # 읽기모드 닫기


# readlines() 함수 이용하기. - 각줄을 리스트에 담음
f = open("newfile.txt", 'r')
lines = f.readlines()
print(lines)    # 각 줄을 리스트에 담아서 출력.
for i in lines:
    print(i)
f.close()

# read() 함수 이용하기. - 텍스트파일 전체를 통째로 출력
f = open("newfile.txt", 'r')
data = f.read()
print("read() 함수:\n", data)
f.close()
반응형

코드를 실행하면 아래와 같은 text파일이 만들어진다.

그리고 나서 위 파일을 다시 읽어서 프린트한다.

 

 

<샘플 코드 아래 참고>

https://diyx2.com/python-create-file-write-and-read-the-files/

 

[Python] Create File, Write and Read the Files - DiY DiY

This instruction is guide for creating, writing and reading file with Python. you can directly use the sample code and test

diyx2.com

 

반응형
반응형

이미지의 3포인트를 잡고 그 기준점을 옮김으로써 전체 이미지를 휘게 한다.

 

아래 3개의 라이브러리가 설치되어 있어야 하며, 이미지 jpg파일이 있어야 한다.

여기서는 'flippy.jpg' 이미지 사용

'''
라이브러리 설치
pip install opencv-python
pip install numpy
pip install matplotlib
'''

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 이미지 불러오기, 이미지 모양 추출
img = cv2.imread('flippy.jpg')      #   이미지 불러오기.
rows,cols,ch = img.shape            #   이미지 가로 세로
print(rows, cols, ch)

# 세 좌표점에 점 찍기
cv2.circle(img, (50, 50), 5, (255, 0, 0), -1)
cv2.circle(img, (200, 50), 5, (255, 0, 0), -1)
cv2.circle(img, (50, 200), 5, (255, 0, 0), -1)


# 원본 이미지의 좌표점 3지점(pts1) -> 휘게하려는 지점(pts2)
pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
pts2 = np.float32([[10, 100], [200, 50], [100, 250]])


# pts1와 pts2 좌표점을 이용해서 전체적으로 이미지 비틀기
M = cv2.getAffineTransform(pts1, pts2)
dst = cv2.warpAffine(img, M, (cols, rows))


# plot(좌표점을 쉽게 볼 수 있는 플랫폼 제공)을 불러와서 보기
plt.subplot(121), plt.imshow(img), plt.title('Input')
plt.subplot(122), plt.imshow(dst), plt.title('Output')
plt.show()

해당 코드를 실행시키면 아래와 같이 나오게 된다.

plot이라는 플랫폼을 이용하면 아래와 같이 이미지를 확대 축소 옮기기 등 기본 메뉴를 제공한다.

plot는 matplotlib 패키지를 설치해야 이용 가능하다.

반응형

 

 

 

반응형
반응형

아래 처럼 단순 별모양 이미지에서 외곽선, 최 내부의 꼭지점, 최 외곽의 블록성(Convexity)를 탐지 한다.

 

외곽선(Contour) 탐지

블록성 결함. (Convexity Defects) : Contour 라인에서 블록체가 되지 못하게 오목하게 들어간 부분 탐지

 

코드 사용을 위해서는 opencv, numpy 라이브러리를 설치해야 한다.

또한 위와같이 'star.jpg' 또는 아무 이미지를 사용해야 한다.

테스트한 이미지는 흑백의 구분이 편한 이미지를 사용했다.

다른 색상 있는 일반이미지는 threshold를 통해 흑백으로 원하는 부분을 추출해서 사용해야 잘 먹힌다.

반응형
import cv2
import numpy as np

img = cv2.imread('star.jpg')                                # 이미지 불러오기
imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)              # 이미지 그레이 전환

ret, thresh = cv2.threshold(imgray, 120, 255, 0)                                         # 흑과 백으로 임계(threshold) 분할
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)   # contour(외곽선)를 찾아냄.(연속된 좌표점)

cv2.drawContours(img, contours, -1, (0, 255, 0), 2)     # contour(외곽선)을 그림, 초록색(0 255 0), 두께 2로
cnt = contours[0]                                       # cnt변수에 Contour[0]에 있는 2차원 연속된 좌표를 넣음.

# 윤곽(convex)정보 휙득
hull = cv2.convexHull(cnt, returnPoints=False)

defects = cv2.convexityDefects(cnt, hull)   #

for i in range(defects.shape[0]):

    s, e, f, d = defects[i, 0]
    start = tuple(cnt[s][0])
    end = tuple(cnt[e][0])
    far = tuple(cnt[f][0])

    # 바깥 최 외곽선을 이은 line 표시 (파랑색)
    cv2.line(img, start, end, [255, 0, 0], 2)

    # 내부의 꼭지점에 좌표점 표시 (빨간색)
    cv2.circle(img, far, 5, [0, 0, 255], -1)


cv2.imshow('img', img)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

이미지 확대 축소 관련

https://ansan-survivor.tistory.com/641

 

[Python OpenCV] 파이썬 이미지 회전하기, 확대 축소 하기

'mask.jpg' 라는 이미지를 파일로 만들어 사용했다. 파이썬 돌리는 코드와 동일한 디렉터리에 해당 파일이 있어야 한다. 이미지를 회전시키기. 이미지의 scale 조절하기 두 기능을 합쳐서 움직이기

ansan-survivor.tistory.com

 

 

 

반응형
반응형

 

'mask.jpg' 라는 이미지를 파일로 만들어 사용했다.

파이썬 돌리는 코드와 동일한 디렉터리에 해당 파일이 있어야 한다.

 

이미지를 회전시키기.

이미지의 scale 조절하기

두 기능을 합쳐서 움직이기 응용

 

import cv2

img = cv2.imread('mask.jpg', 0)     #   사용할 이미지 파일 흑백(0)
rows, cols = img.shape

flag = 0        # 스케일을 줄이고 키우고 줄이기 위한 플레그

scale = 1       # 초기값설정
angle = 0       # 초기 0도

while True:
    M = cv2.getRotationMatrix2D((cols / 2, rows / 2), angle, scale)
    dst = cv2.warpAffine(img, M, (cols, rows))

    angle = angle + 10      # 각을 10도 씩 회전
    if angle == 360:        # 0도~360도
        angle = 0

    if flag == 0:               # 스케일이 점점 줄어듦
        scale = scale - 0.01
        if scale <= 0:
            flag = 1

    if flag == 1:               # 스케일이 점점 늘어남
        scale = scale + 0.01
        if scale >= 1:
            flag = 0


    cv2.imshow('img', dst)      #   이미지 출력
    if cv2.waitKey(50) == 27:   #   esc 누르면 종료
        break

cv2.destroyAllWindows()

(결과)

반응형

 

단순 이미지 회전하는 코드는 아래 참고

https://ansan-survivor.tistory.com/954

 

[Python OpenCV] 파이썬 이미지 회전하기

원본영상을 90도 회전시키는 함수 회전각에 원하는 각을 넣어 회전 가능하다. (for문으면 계속 빙빙돌릴 수 있다) ''' made by 안산드레아스 이미지 회전하기 필요 패키지 : python-opencv ''' import cv2 '''

ansan-survivor.tistory.com

 

반응형
반응형

Mask를 이용하여 두 이미지를 합성하는 예제 코드이다.

단, 두 이미지의 크기가 같아야 작동한다. 만약 이미지 크기가 조금이라도 다르다면 오류를 일으킨다.

 

여기서는 flippy.jpg 라는 이미지와 'logo.jpg' 이미지 두개를 합성했다.

원리는 검정색 값은 RGB값이 (0, 0, 0) 이고, 흰색은 (255, 255, 255)이다.

그래서 그 어떤색도 흰색과 더해진다면 모두 흰색이 되고, 검정색은 아무 값이 없기에 합성된 이미지값들이 모두 더해진다. 아래 합성 이미지를 보면 기존 흰색인 부분은 그대로 흰색이고, 검정색인 부분은 녹색배경과 더해져서 그대로 녹색만 출력되었다.

나머지는 빨간색 + 녹색 = 주황색 등등 이런식으로 저런 결과가 나왔다.

 

import cv2

img1 = cv2.imread('flippy.jpg', cv2.IMREAD_COLOR)
img2 = cv2.imread('logo.jpg', cv2.IMREAD_COLOR)

# 두 이미지 합성
img3 = cv2.add(img1, img2)

cv2.waitKey(1000)
cv2.imshow('flippy.jpg', img1)
cv2.imshow('logo.jpg', img2)
cv2.imshow('addtion', img3)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

반응형

 

(결과)

 

 

반응형
123456

+ Recent posts