객체의 색상을 실시간으로 탐지 --- 파이썬 OpenCV4 재미있는 응용 프로그램 시리즈 (4 개)

오늘, 우리는 다음과 같이 우리는, 빨간색과 녹색 구형 물체를 감지, 세 가지 기본 컬러 비디오 객체를 객체 인스턴스의 작은 색상의 실시간 감지를 달성하기 위해 비디오를했다가 :

비디오 (또는 카메라)를 개방 할 필요가 첫 번째 단계 :

캡 = cv2.VideoCapture ( '1.mp4') #은 비디오 파일 열기 
# 캡 = cv2.VideoCapture (0) # 개방 USB 카메라

사이클은 프레임, 색 물체 검출을 할 필요가있다. 컬러 필터 문턱 값을 이용하여 물체의 감지 HSV 색이, 한계 값을 키 HSV로 설정되어, 아래의 표 HSV 색은 일반적으로 사용된다 :

그러나 그림은 또한 다음입니다 같은 우리가 HSV 임계 값을 사용하는 빨간색과 녹색 위의 그림에서와 같이 그림의 대상의 작은 HSV 값을 추출하는 자신의 포획을 쓸 수있는 특정 도구 및 수동 설정 임계 값을 필요 :

lower_green = np.array ([35, 110 , 106]) # 녹색 범위의 낮은 임계 값 
= np.array upper_green가 ([77, 255 , 255]) # 높은 임계 녹색 범위 

lower_red = np.array ([0, 127 , 128 ]) # 적색 범위 낮은 임계치 
upper_red np.array = ([10, 255 , 255]) # 높은 임계 범위 적색

다음 단계는 필터링 처리, 윤곽 추출하고 컬러 putText 함수로 표시하면서 최종 결과는, 직사각형의 상자 객체 검출을 나타내는 표시되고, 전체 코드 및 최종 결과는 다음이다 :
전체 코드 :

# - * - 코딩 : cp936 - * - 
오기 NumPy와 AS NP 

오기 CV2가 

폰트 = cv2.FONT_HERSHEY_SIMPLEX 

lower_green np.array = ([35, 110, 106]) # 녹색 범위의 낮은 임계 값 
= np.array (upper_green [77, (255) 높은 임계 255]) # 녹색 범위 

lower_red = np.array ([0, 127 , 128]) # 적색 범위 낮은 임계치 
upper_red = np.array ([10, 255 , 255]) # 높은 임계 적색 범위 

캡 = CV2 .VideoCapture가 ( '1.mp4') # 비디오 파일 열기 
# 캡 = cv2.VideoCapture (0) # 개방 USB 카메라 


(cap.isOpened는 ()) 경우 : # 비디오 공개에 성공 
    .에서 플래그 1 = 
다른 : 
    에서 플래그 = 0 

NUM = 0 
IF (인 플래그) 
    그동안 (참)는 : 
        RET는 프레임 = cap.read ()는 #의 판독 
        (프레임 없음 없음) IF #을 : 
        IF RET == 거짓 : 판독 프레임 # 실패한 
            체류
        = cv2.cvtColor hsv_img (프레임 cv2.COLOR_BGR2HSV) 
        mask_green = cv2.inRange (hsv_img, lower_green, upper_green) #로부터 선택된 색상에 따라 다양한 천공 
        mask_red = cv2.inRange (hsv_img, lower_red, upper_red) # 으로부터 선택된 색상에 따라 다양한 천공 
        mask_green = cv2.medianBlur (mask_green 7) # 메디안 필터 
        mask_red = cv2.medianBlur (mask_red 7) # 메디안 필터 
        마스크 = cv2.bitwise_or (mask_green, mask_red) 
        cv2.imshow ( 'mask_green'mask_green) 
        cv2.imshow ( ) 'mask_red'mask_red 
        ( "마스크", 마스크)를 cv2.imshow 
        윤곽에 대한 CNT : 
            (X, Y, W, H) = cv2.boundingRect (CNT) 
        mask_green, 등고선 cv2.findContours = 계층 (mask_green, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
        mask_red, contours2, hierarchy2 = cv2.findContours (mask_red, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 

            cv2.rectangle (프레임 (X, Y), (X + Y + 높이), (0, 255, 255), w, 2) 
            cv2.putText (프레임, "그린"(X, Y - 5), 폰트, 0.7, (0, 255, 0), 2) 

        contours2에 대한 CNT2 : 
            (X2, Y2, W2, H2) = CV2 .boundingRect (CNT2) 
            cv2.rectangle (프레임 (X2, Y2), (X2 + W2, Y2 + H2), (0, 255, 255), 2) 
            cv2.putText (프레임 "빨강", (X2, Y2 - 5), 폰트, 0.7 (0, 0, 255), 2) 
        NUM NUM = + 1 
        cv2.imshow ( "결과"프레임) 
        cv2.imwrite ( "imgs / %의 d.jpg"%의 NUM 프레임 ) 

        cv2.waitKey (20) == 0xFF의 경우 27 :출구에 # Esc 키를 눌러 
            중단

cv2.waitKey (0) 

cv2.destroyAllWindows ()

순 효과 애니메이션 :

[OpenCV의 깊이 관심과 학습 AI] 학습에 대한 자세한 내용은

길게 눌러 또는 따라 다음 QR 코드를 스캔

  

  

추천

출처www.cnblogs.com/stq054188/p/11883916.html