質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

USBカメラを認識しません Python , OpenCV , cv2.VideoCapture

Li3
Li3

総合スコア9

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

10031閲覧

投稿2020/05/02 07:08

前提・実現したいこと

全体としては動画処理をしたく、
問題としてはcv2.VideoCapture(0)部分で

上手くUSBカメラが認識できません
(下記に記載した"試したこと"の通り)

初心者で申し訳ないですがご教授願います。

発生している問題・エラーメッセージ

[ WARN:0] global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (1113) SourceReaderCB::OnReadSample videoio(MSMF): OnReadSample() is called with error status: -1072875772 [ WARN:0] global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (1125) SourceReaderCB::OnReadSample videoio(MSMF): async ReadSample() call is failed with error status: -1072875772 [ WARN:1] global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (1159) CvCapture_MSMF::grabFrame videoio(MSMF): can't grab frame. Error: -1072875772 cannot read image [ WARN:1] global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (674) SourceReaderCB::~SourceReaderCB terminating async callback

該当のソースコード

Python

import cv2 import numpy as np # 0 <= h <= 179 (色相) OpenCVではmax=179なのでR:0(180),G:60,B:120となる # 0 <= s <= 255 (彩度) 黒や白の値が抽出されるときはこの閾値を大きくする # 0 <= v <= 255 (明度) これが大きいと明るく,小さいと暗い # ここでは青色を抽出するので120±20を閾値とした LOW_COLOR = np.array([100, 75, 75]) HIGH_COLOR = np.array([140, 255, 255]) # 抽出する青色の塊のしきい値 AREA_RATIO_THRESHOLD = 0.005 def find_specific_color(frame,AREA_RATIO_THRESHOLD,LOW_COLOR,HIGH_COLOR): """ 指定した範囲の色の物体の座標を取得する関数 frame: 画像 AREA_RATIO_THRESHOLD: area_ratio未満の塊は無視する LOW_COLOR: 抽出する色の下限(h,s,v) HIGH_COLOR: 抽出する色の上限(h,s,v) """ # 高さ,幅,チャンネル数 h,w,c = frame.shape # hsv色空間に変換 hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) # 色を抽出する ex_img = cv2.inRange(hsv,LOW_COLOR,HIGH_COLOR) # 輪郭抽出 _,contours,hierarchy = cv2.findContours(ex_img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) # 面積を計算 areas = np.array(list(map(cv2.contourArea,contours))) if len(areas) == 0 or np.max(areas) / (h*w) < AREA_RATIO_THRESHOLD: # 見つからなかったらNoneを返す print("the area is too small") return None else: # 面積が最大の塊の重心を計算し返す max_idx = np.argmax(areas) max_area = areas[max_idx] result = cv2.moments(contours[max_idx]) x = int(result["m10"]/result["m00"]) y = int(result["m01"]/result["m00"]) return (x,y) def main(): # webカメラを扱うオブジェクトを取得 cap = cv2.VideoCapture(0) while True: ret,frame = cap.read() if ret is False: print("cannot read image") continue # 位置を抽出 pos = find_specific_color( frame, AREA_RATIO_THRESHOLD, LOW_COLOR, HIGH_COLOR ) if pos is not None: # 抽出した座標に丸を描く cv2.circle(frame,pos,10,(0,0,255),-1) # 画面に表示する cv2.imshow('frame',frame) # キーボード入力待ち key = cv2.waitKey(1) & 0xFF # qが押された場合は終了する if key == ord('q'): break cv2.destroyAllWindows()

試したこと

・Video I/Oを有効化

・下記ライブラリをインストール
pip install opencv-contrib-python --user

・下記確認用コードでカメラのIDを確認
import cv2

cap_cam = cv2.VideoCapture(0)
print(type(cap_cam))

print(cap_cam.isOpened())

→この際はTrueを返しエラーとしてはterminating async callbackのみ
cv2.VideoCapture(-1) → false
cv2.VideoCapture(0) → true
cv2.VideoCapture(1) → false
cv2.VideoCapture(2) → false

PCにインストールされているその他デバイスとして
キャプチャーデバイス GC551がありますが影響とかあるのでしょうか・・・

補足情報(FW/ツールのバージョンなど)

Python 3.8.2
Opnecv-python 4.2.0.34

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。