ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OpenCV 기초
    딥러닝 2024. 1. 30. 16:16

    [0,0], 픽셀 제일 위, 왼쪽
    [0,1]

     

     

    import cv2 as cv
    import sys
    
    img=cv.imread('cat1.jpeg')
    
    if img is None:
        sys.exit('파일을 찾을 수 없습니다.')
        
    gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    gray_small=cv.resize(gray,dsize=(0,0),fx=0.5,fy=0.5)  # 반으로 축소
    
    cv.imwrite('cat_gray.jpg',gray)  # 파일로 저장
    cv.imwrite('cat_gray_small.jpg',gray_small)
    
    cv.imshow('Color image',img)
    cv.imshow('Gray image',gray)
    cv.imshow('Gray image small',gray_small)
    
    cv.waitKey()
    cv.destroyAllWindows()

    그래픽 기능과 사용자 인터페이스 만들기

    영상에 도형 그리고 글씨 쓰기

    import cv2 as cv
    import sys
    
    img=cv.imread('girl_laughing.jpg')
    
    if img is None:
        sys.exit('파일을 찾을 수 없습니다.')
        
    cv.rectangle(img,(830,30),(1000,200),(0,0,255),2)  # 직사각형 그리기, 마지막 2는 직사각형 두께
    cv.putText(img,'laugh',(830,24),cv.FONT_HERSHEY_SIMPLEX,1,(255,0,0),2)  # 글씨 쓰기
    
    cv.imshow('Draw',img)
    
    cv.waitKey()
    cv.destroyAllWindows()

     

    마우스로 클릭한 곳에 직사각형 그리기

    import cv2 as cv
    import sys
    
    img=cv.imread('girl_laughing.jpg')
    
    if img is None:
        sys.exit('파일을 찾을 수 없습니다.')
        
    def draw(event,x,y,flags,param):       # 콜백 함수
        if event==cv.EVENT_LBUTTONDOWN:    # 마우스 왼쪽 버튼 클릭했을 때
            # 순서대로 이미지, 직사각형 그릴 시작 위치, 직사각형 크기, 색, 두께
            cv.rectangle(img,(x,y),(x+200,y+200),(0,0,255),2)
        elif event==cv.EVENT_RBUTTONDOWN:  # 마우스 오른쪽 버튼 클릭했을 때
            cv.rectangle(img,(x,y),(x+100,y+100),(255,0,0),2)
            
        cv.imshow('Drawing',img)
            
    cv.namedWindow('Drawing')
    cv.imshow('Drawing',img)
        
    cv.setMouseCallback('Drawing',draw)  # Drawing 윈도우에 draw 콜백 함수 지정
    
    while(True):                         # 마우스 이벤트가 언제 발생할지 모르므로 창 닫기 전까지 무한 반복 
        if cv.waitKey(1)==ord('q'):
            cv.destroyAllWindows()
            break

     

    마우스 드래그로 직사각형 그리기

    import cv2 as cv
    import sys
    
    img=cv.imread('girl_laughing.jpg')
    
    if img is None:
        sys.exit('파일을 찾을 수 없습니다.')
    
    def draw(event,x,y,flags,param):
        global ix, iy
        
        if event==cv.EVENT_LBUTTONDOWN:  # 마우스 왼쪽 버튼 클릭했을 때 초기 위치 저장
            ix,iy=x,y
        elif event==cv.EVENT_LBUTTONUP:  # 마우스 왼쪽 버튼 클릭했을 때 직사각형 그리기
            cv.rectangle(img,(ix,iy),(x,y),(0,0,255),2)
        
        cv.imshow('Drawing',img)
    
    cv.namedWindow('Drawing')
    cv.imshow('Drawing',img)
    
    cv.setMouseCallback('Drawing',draw)
    
    while(True):
        if cv.waitKey(1)==ord('q'):
            cv.destroyAllWindows()
            break

     

    페인팅 기능 만들기

    빨간색 붓과 파란색 붓으로 페인팅하기

    import cv2 as cv
    import sys
    
    img=cv.imread('cat1.jpeg')
    
    if img is None:
        sys.exit('파일을 찾을 수 없습니다.')
        
    BrushSiz=5                         # 붓 크기
    LColor,RColor=(255,0,0),(0,0,255)  # 파란색, 빨간색
    
    def painting(event,x,y,flags,param):
        if event==cv.EVENT_LBUTTONDOWN:
            cv.circle(img,(x,y),BrushSiz,LColor,-1)  # 마우스 왼쪽 버튼 클릭하면 파란색
        elif event==cv.EVENT_RBUTTONDOWN:
            cv.circle(img,(x,y),BrushSiz,RColor,-1)  # 마우스 오른쪽 버튼 클릭하면 빨간색
        elif event==cv.EVENT_MOUSEMOVE and flags==cv.EVENT_FLAG_LBUTTON:
            cv.circle(img,(x,y),BrushSiz,LColor,-1)  # 왼쪽 버튼 클릭하고 이동하면 파란색
        elif event==cv.EVENT_MOUSEMOVE and flags==cv.EVENT_FLAG_RBUTTON:
            cv.circle(img,(x,y),BrushSiz,RColor,-1)  # 오른쪽 버튼 클릭하고 이동하면 빨간색
        
        cv.imshow('Painting',img)  # 수정된 영상을 다시 그림
    
    cv.namedWindow('Painting')
    cv.imshow('Painting',img)
    
    cv.setMouseCallback('Painting',painting)
    
    while(True):
        if cv.waitKey(1)==ord('q'):
            cv.destroyAllWindows()
            break

Designed by Tistory.