OpenCV에서 웹캠에서 이미지를 얻지 못할 때의 메모 (Ubuntu16.04)

운영 환경



소프트웨어


  • Python 3.5.3
  • OpenCV 3.4

  • 하드웨어(웹캠)


  • logicool c270 ( 제품 페이지 )

  • 이 카메라는 빅카메라로 1000엔이었기 때문에 샀다. 정지화면으로 300만 화소. 최근 웹캠은 UVC이기 때문에 우분투에서도 문제없이 사용할 수 있다. 좋아하는 것을 사용하면 좋다고 생각한다.
    USB video device class (UVC) | Wikipedia

    동작 확인



    USB가 인식되는지 확인.
    $ lsusb
    Bus 001 Device 003: ID 046d:0825 Logitech, Inc. Webcam C270
    

    동영상으로 인식되는지 확인합니다.
    $ l /dev/video*
    /dev/video0
    

    0ch의 카메라에 액세스하면 좋을 것 같다.

    웹캠에서 이미지를 얻는 방법



    다음 코드를 적절한 이름으로 저장합니다. 0ch로부터 취득하기 때문에 cv2.VideoCapture(0) 로 하고 있다.

    capture.py
    #!/usr/bin/env python3
    # -*-coding: utf-8 -*-
    
    import cv2
    import time
    
    def main():
        cap = cv2.VideoCapture(0)
        while(True):
            # Capture frame-by-frame
            ret, frame = cap.read()
            if ret:
                cv2.imshow('frame', frame)
            else:
                time.sleep(2)
    
            # Display the resulting frame
            if cv2.waitKey(20) == 27:
                break
    
        # When everything done, release the capture
        cap.release()
        cv2.destroyAllWindows()
    
    
    if __name__ == '__main__':
        main(args)
    

    다음을 실행하면 웹캠에서 이미지를 얻을 수 있습니다. 런타임에 sudo를 붙이는 것을 잊지 마십시오.
    $ sudo ./capture.py
    

    오류가 발생하여 이미지를 얻지 못할 때



    상기에서 그대로 화상을 취득할 수 있으면 문제는 없지만, 이하와 같은 에러가 발생하는 경우가 있다.
    X Error: BadDrawable (invalid Pixmap or Window parameter) 9
      Major opcode: 62 (X_CopyArea)
      Resource id:  0x3600010
    

    해결책 그 1 (저장)


    cv2.imshow() 를 그만두고 cv2.imwrite() 를 이용하면 정상적으로 취득할 수 있을 것. 그러나 불편하다.

    해결책 그 2 (프로필 수정)



    다음 페이지를 참고로 했다.
    BadDrawable (invalid Pixmap or Window parameter) #53
    /etc/environment를 편집기에서 엽니 다. 여기서 nano를 사용합니다.
    $ sudo nano -w /etc/environment
    

    마지막 줄에 다음을 추가합니다.
    QT_X11_NO_MITSHM=1
    
    sudo ./capture.py를 다시 실행하여 이미지를 볼 수 있으면 해결.



    이상.

    좋은 웹페이지 즐겨찾기