파이썬(Python)/opencv

[Python]OpenCV 그림 영역 선택, 모자이크 처리하기(Image, Mosaic, Blur)

끄적끄적아무거나 2022. 3. 28. 20:18
반응형

목차

     

     

     

     

    파이썬 OpenCV Image File 모자이크 처리

     

    이번 포스트는 파이썬 OpenCV의 Blur 함수를 사용해서 모자이크(Mosaic)처리 하는 방법에 대해 알아보겠습니다. 이번 포스트를 수행하기 위해서 아래 단계를 수행 합니다.

     

    1. 이미지 파일불러오기
    2. 모자이크할 영역 선택하기
    3. 선택 영역 blur함수로 모자이크하기
    4. 원본 영역에 blur 모자이크된 영역 덧붙이기
    5. 변경된 이미지 불러오기

     

    1~2번 단계는 selectROI로 구현 합니다. selectROI 함수 사용법에 대해서는 아래 포스트에서 진행하였으니 궁금하시면 아래 포스트 참조하시면 됩니다.

    https://scribblinganything.tistory.com/496

     

    [Python]OpenCV 이미지 마우스 클릭 좌표(위치) 값 확인(selectROI 함수)

    목차 OpenCV 이미지 마우스 클릭 좌표 값 확인 파이썬 OpenCV의 함수 중에 selectROI 함수는 이미지(image) 파일이나 그림 파일을 읽었을 때 마우스로 원하는 이미지를 클릭하면 해당 위치(Location) 값을 re

    scribblinganything.tistory.com

     

    3번 단계에서 blur 함수를 사용합니다. blur 함수 사용법은 아래와 같습니다.

     

    cv2.blur(src, ksize)

    src는 blur 처리할 이미지를 넣습니다. ksize는 표준화 필터(Normalized filter)의 커널 사이즈(Kernal size)를 의미합니다. 튜블(Tuple) 형태로 값을 입력 하고 간단히 말하면 커널이 커질 수록 흐리게 처리되는 정도가 커집니다. 

     

    4~5번 단계는 앞서 이미지를 픽셀에서 편집(edit)하는 포스트에서 사용방법을 배웠으니 참조하시면 됩니다.

    https://scribblinganything.tistory.com/493

     

    [Python]OpenCV 이미지 픽셀로 변경하여 수정하기(Numpy array)

    목차 OpenCV 이미지 픽셀(Pixel)값 확인하기 우리가 사용하는 컴퓨터의 이미지 파일은 아시다 시피 디지털(Digital)로 되어 있습니다. 화면으로 보이는 값은 실상 픽셀이라는 작은 단위를 BGR(Blue, Green,

    scribblinganything.tistory.com

     

     

    앞서 내용이 잘이해되지 않더라도 아래에 실습 예제를 보시면 코드 동작에 대해 쉽게 이해할 수 있습니다.

     

     

     

     

    파이썬 OpenCV Image File 모자이크 실습 예제

     

    예제 코드>>

    import cv2
    
    img = cv2.imread('car.jpg')    
    
    x_pos,y_pos,width,height = cv2.selectROI("location", img, False) 
    print("x position, y position : ",x_pos, y_pos)
    print("width, height : ",width, height)
    
    mosaic_loc = img[y_pos:y_pos+height, x_pos:x_pos+width]
    mosaic_loc = cv2.blur(mosaic_loc,(50,50))
    img_w_mosaic = img
    img_w_mosaic[y_pos:y_pos+height, x_pos:x_pos+width] = mosaic_loc
    cv2.destroyAllWindows()
    cv2.imshow("Mosaic", img_w_mosaic)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    3번 라인: imread 함수로 자동차 이미지를 불러옵니다.

    5번 라인: selectROI 함수를 사용해서 이미지를 화면에 띄우고 마우스 클릭으로 영역을 선택 후 enter 입력하면 x, y 좌표와 넓이와 높이 값을 return 해줍니다.

    9~10번 라인: 선택한 구역의 이미지 픽셀값을 mosaic_loc에 저장하고 blur 처리 합니다. 커널 사이즈는 (50,50)으로 처리 합니다.

    11~12번 라인: 모자이크(Mosaic) 처리한 이미지를 원본의 동일 위치에 덧붙입니다.

    13번 라인: selecROI 함수에의해 출력된 그림(Picture)파일을 없앱니다.

    14번 라인: 모자이크로 흐림처리된 이미지를 불러 옵니다.

     

     

    결과>>

    Select a ROI and then press SPACE or ENTER button!
    Cancel the selection process by pressing c button!
    x position, y position :  840 482
    width, height :  305 141​

     

     

    x축과 y축의 정보와 사이즈 정보가 출력되고 번호판을 흐림처리 하였습니다.

     

     

     

    반응형