파이썬(Python)/opencv

[Python]OpenCV 픽셀 처리 함수: add, subtract, multiply, divide

끄적끄적아무거나 2022. 4. 21. 08:35
반응형

 

목차

     

     

    앞서 이미지(image)나 동영상(video) 파일을 읽어서 불러온 이미지는 픽셀(pixel)의 BGR(Blue, Green, Red) 값으로 구성 됨을 확인하였습니다. (https://scribblinganything.tistory.com/493) 이번 포스트는 픽셀을 비교 (연산) 분석할때 사용하는 주요 함수에 대해 알아보겠습니다. 함수는 더하기, 빼기, 곱하기 나누기 입니다.

     

    함수 사용에 앞서 race_car.jpg 라는 그림 파일을 불러서 동일 사이즈로 BGR이 100, 100, 100인 그림을 만들어서 해당 그림과 비교하는 형식으로 예제를 실행하겠습니다.

     

     

    예제 코드>>

    import numpy as np
    import cv2
    
    img = cv2.imread("race_car.jpg")
    base_pixel = np.full(img.shape,([100,100,100]), dtype=np.uint8)
    
    print("img.shape: ",img.shape)
    print("base_pixel.shape: ", base_pixel.shape)
    
    cv2.imshow("img", img)
    cv2.imshow("base_pixel", base_pixel)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    4번 라인: race_car 그림파일을 불러옵니다.

    5번 라인: race_car 이미지의 사이즈 정보를 불러와서 numpy (넘파이) 함수를 사용해서 동일 형렬(배열, matrix)를 만들고 픽셀 값으로 100, 100, 100을 채웁니다.





    결과>>

    img.shape: (853, 1280, 3)
    base_pixel.shape: (853, 1280, 3)

     

    img 그림이미지>>

     

     

    base_pixel 그림 이미지>>

     

     

     

    아래 예제들은 위 코드를 기본으로 사용하는 함수 입니다.

     

     

     

    파이썬 OpenCV add 함수 사용법 및 예제

     

    두개 이미지(img, base_pixel)의 픽셀 값을 더해서 나오는 이미지를 출력해보겠습니다.

     

    예제 코드>>

    import numpy as np
    import cv2
    
    img = cv2.imread("race_car.jpg")
    base_pixel = np.full(img.shape,([100,100,100]), dtype=np.uint8)
    
    add_pixel = cv2.add(img, base_pixel)
    
    cv2.imshow("race_car", add_pixel)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    7번 라인: OpenCV add를 사용해서 img 와 base_pixel 이미지 픽셀(Pixel) 값을 합했습니다.

     

     

    결과>>

    픽셀 값이 커지면서 하얀색에 가깝게 변색되는 느낌입니다.

     

     

     

     

     

     

     

    파이썬 OpenCV subtract 함수 사용법 및 예제

     

    두개 이미지(img, base_pixel)의 픽셀 값을 빼서 나오는 이미지를 출력해보겠습니다.

     

    예제 코드>>

    import numpy as np
    import cv2
    
    img = cv2.imread("race_car.jpg")
    base_pixel = np.full(img.shape,([100,100,100]), dtype=np.uint8)
    
    add_pixel = cv2.subtract(img, base_pixel)
    
    cv2.imshow("race_car", add_pixel)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    7번 라인: OpenCV substract를 사용해서 img 와 base_pixel 이미지 픽셀(Pixel) 값을 뺏습니다.

     

     

    결과>>

    픽셀(pixel) 값이 작아지면서 전체적으로 어두운 톤의 그림(picture)이 되었습니다.

     

     

     

     

     

     

    파이썬 OpenCV multiply 함수 사용법 및 예제

     

    두개 이미지(img, base_pixel)의 픽셀 값을 곱해서 나오는 이미지를 출력해보겠습니다.

     

    예제 코드>>

    import numpy as np
    import cv2
    
    img = cv2.imread("race_car.jpg")
    base_pixel = np.full(img.shape,([100,100,100]), dtype=np.uint8)
    
    add_pixel = cv2.multiply(img, base_pixel)
    
    cv2.imshow("race_car", add_pixel)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    7번 라인: OpenCV multiply를 사용해서 img 와 base_pixel 이미지 픽셀(Pixel) 값을 곱했습니다.

     

     

     

    결과>>

    픽셀 값이 255에 가까워지면서 거의 흰톤으로 나왔습니다.

     

     

     

     

     

     

     

    파이썬 OpenCV divide 함수 사용법 및 예제

     

    두개 이미지(img, base_pixel)의 픽셀 값을 곱해서 나오는 이미지를 출력해보겠습니다.

     

    예제 코드>>

    import numpy as np
    import cv2
    
    img = cv2.imread("race_car.jpg")
    base_pixel = np.full(img.shape,([100,100,100]), dtype=np.uint8)
    
    add_pixel = cv2.divide(img, base_pixel)
    
    cv2.imshow("race_car", add_pixel)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    7번 라인: OpenCV divide 를 사용해서 img 와 base_pixel 이미지 픽셀(Pixel) 값을 나누기를 하였습니다.

     

     

    결과>>

     

     

     

     

    반응형