LoginSignup
8
7

More than 5 years have passed since last update.

OpenCVでWebカメラからの画像取得に失敗する時のメモ(Ubuntu16.04)

Posted at

動作環境

ソフトウェア

  • Python 3.5.3
  • OpenCV 3.4

ハードウェア(Webカメラ)

このカメラはビックカメラで1000円だったので買った。静止画で300万画素。最近のWebカメラはUVCだからUbuntuでも問題なく使える。好きなのを使えばいいと思う。
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のカメラにアクセスすれば良さそう。

Webカメラから画像を取得する方法

以下のコードを適当な名前で保存する。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)

以下を実行すればWebカメラから画像を取得できる。実行時には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(profileを修正)

以下のページを参考にした。
BadDrawable (invalid Pixmap or Window parameter) #53

/etc/environmentをエディタで開く。ここではnanoを使用する。

$ sudo nano -w /etc/environment

最終行に以下を追加する。

QT_X11_NO_MITSHM=1

再びsudo ./capture.pyを実行して画像が表示できていれば解決。

cam.jpg

以上。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7