파이썬(Python)/opencv

[Python]OpenCV 픽셀 처리 함수:max,min,absdiff,compare

끄적끄적아무거나 2022. 4. 20. 08:33
반응형

 

목차

     

     

    앞서 이미지(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 max 함수 사용법 및 예제

     

    max 함수는 픽셀(Pixel) 값을 비교해서 둘 중에 최대 값을 가져 옵니다. 즉, 100, 100, 100 BGR 값과 비교해서 큰 값을 불러 옵니다.

     

    아래 코드를 통해 쉽게 이해하실 수 있습니다.

     

     

    예제 코드>>

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

    7번 라인: cv2 의 max 함수를 사용해서 img 픽셀 값과 base_pixel 픽셀 값의 최대 값을 가져옵니다.

     

     

    결과>>

     

     

     

     

     

     

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

     

    min 함수는 픽셀(Pixel) 값을 비교해서 둘 중에 최소 값을 가져 옵니다. 즉, 100, 100, 100 BGR 값과 비교해서 작은 값을 불러 옵니다.

     

    아래 코드를 통해 쉽게 이해하실 수 있습니다.

     

     

    예제 코드>>

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

    7번 라인: cv2 의 min 함수를 사용해서 img 픽셀 값과 base_pixel 픽셀 값의 최소 값을 가져옵니다.

     

     

    결과>>

     

     

     

     

     

     

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

     

    absdiff 함수는 픽셀(Pixel) 값을 비교해서 둘 중에 최소 값을 가져 옵니다. 즉, 100, 100, 100 BGR 값과 비교해서 차이 값의 절대 값(Absoulte value) 불러 옵니다.

     

    아래 코드를 통해 쉽게 이해하실 수 있습니다.

     

     

    예제 코드>>

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

    7번 라인: cv2 의 absdiff 함수를 사용해서 img 픽셀 값과 base_pixel 픽셀 값의 차이의 절대값을 가져옵니다.

     

     

    결과>>

     

     

     

     

     

     

     

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

     

    compare함수는 픽셀(Pixel) 값을 비교하는데 비교 조건을 option에서 선택할 수 있습니다. 조건(Condition)은 아래와 같습니다. 그리고 비교 결과가 참(True)일 경우 255 값을 return 해주고 거짓(False)일 경우 0을 return 해줍니다.

     

    • cv2.CMP_GT : >
    • cv2.CMP_GE : >=
    • cv2.CMP_LT : <
    • cv2.CMP_LE : <=
    • cv2.CMP_EQ : =
    • cv2.CMP_NE : !=

     

    등호로 사용법을 아실 것으로 생각합니다.

     

    아래 코드를 통해 쉽게 이해하실 수 있습니다.

     

     

    예제 코드>>

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

    7번 라인: cv2 의 compare함수를 사용해서 255, 0 값을 불러 옵니다.

     

     

    결과>>

     

     

     

    반응형