AI Track/CV

[openCV] cv2.imshow 창이 안뜨는 문제 해결

쫑쫑JJONG 2022. 11. 9. 02:54
728x90

1. 문제상황

while cv2.waitKey(33) < 0:
    _, src = cap.read() #영상파일 읽어드리기
    cv.imshow("Original", src) #원본 화면
    check = Yellow_bell_detect(src,yellow1,yellow2,yellow_chance) #인식 o :51 ///  인식 x :50
    sleep(0.08)
cap.release()
cv2.destroyAllWindows()

저렇게 코딩을 하였더니 함수처리 시간 때문에

카메라가 뚝뚝 끊기는 현상이 발생

 

아이디어 : Thread를 이용해보자

    ############## 제어보드로부터 수신받기 시작 ##############
    serial_t = Thread(target=Receiving, args=(serial_port, cap,))
    serial_t.daemon = True # 수신을 하는 스레드는 데몬 스레드
    serial_t.start()
    time.sleep(0.1) 
  
    #-------------------------------------
    ############## 카메라 스레드 켜기 ##############
    serial_c = Thread(target=Camera, args=(serial_port, cap,))
    serial_c.daemon = False # 수신을 하는 스레드는 데몬 스레드
    serial_c.start()
    time.sleep(1)

다음과 같이 tread 두개를 나눠서 하나는 연속적으로 카메라만 띄우고

다른 한개가 제어보드와 송수신을 하는 것을 구상하여서

Camera 함수를 다음과 같이 구상 

#-----------------------------------------------
def Camera(ser, cap):
    W_View_size = 640
    H_View_size = int(W_View_size / 1.333)
    FPS = 90  # PI CAMERA: 320 x 240 = MAX 90
    try:
        cap = cv2.VideoCapture(0)  # 카메라 켜기  # 카메라 캡쳐 (사진만 가져옴)

        cap.set(3, W_View_size)
        cap.set(4, H_View_size)
        cap.set(5, FPS)
        print("Get ready to camera!")

    except:
        print('cannot load camera!')

    while cv2.waitKey(33) < 0:
        _, src = cap.read() #영상파일 읽어드리기
        cv.imshow("Original", src) #원본 화면
    cap.release()
    cv2.destroyAllWindows()

ㅊ하지만  마지막에서 두번째 줄에 imshow를 넣었음에도 불구하고 창이 안뜨는 문제가 발생

(import cv2 as cv를 하여서 코드상의 문제는 아니였습니다)

 

 waitKey() : 키 입력을 기다리는 대기 함수

=> 해결방법

cv2.waitKey(1)을 넣어서 해결

추측컨데 delay가 없어서 계속 cap를 받기만 한거 같다

cv2.waitKey() 함수는 지정된 시간동안 키보드의 입력을 기다리는 함수 이고 (ms)가 기본단위이다

만약 ESC 면 cv2.waitKey() == 27 이다

이를 응용해보면

k = cv2.waitKet(0) & 0xFF

0xFF는 운영체제가 64 비트여서 and연산자를 넣은 것이고

waitKey에 0 이만 무한대기 (키가 입력될때 까지)

그리고 입력받은 값은 k로 저장된다 (아스키 값)

이를 이용하려면

ord() <=> chr()을 이용하면 될 것 같다

 

 

※추가정리

 cv2.destroyAllWindows() : 프로그램 종료

 

마지막으로 밤새는 불쌍한 우리 팀원들 첨부 ㅠㅠ

 

 

 

 

 

728x90