0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSLでOpenCVを使ってカメラをキャプチャするときにはファイル形式を指定しよう

0
Last updated at Posted at 2026-09-24

こんなに長い歴史を持つライブラリなのに日本語での情報がないので一応.

tl;dr

たぶん,ホスト(Windows)のカメラはYUVで,WSL内のOpenCVはRGBで解釈しようとして不整合.

するとこういうことになる.

image.png

環境

  • Windows 11
  • WSL 2
  • Ubuntu 24.04.4 LTS
  • Python 3.14.5
  • OpenCV (Python) 5.0.0.93

対策方法

始めバックエンドの指定が間違っているのかと思ったが,そうではなかった.

問題はFourCC が指定されていないこと.VideoCaptureオブジェクトに,MJPEGなど適当な形式を明示的に指定してやると解決した(参考).

以下はコード例12

while True:
    cap = cv2.VideoCapture(0)
    cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc(*"MJPG"))
    # etc...

これにより,ただのデータの列ではなく正式なJPEG画像(の列)としてデータが再編されるため,Windwos-WSLという過酷な環境でも生き残ってくれるらしい.(参考)

あとがき

正直詳しいことはよくわからない.今は忙しいのでもうちょい習熟してからちゃんと調べなおす.

  1. cv2.VideoWriter_fourcc()というメソッドもあるが,これは非推奨(出典) ↩

  2. set()はおそらくC++製ライブラリである名残なんだろうなと思ってちょっとわかっている人風の顔をしてみたり.Pythonicにやるなら@propertyとかにするよね. ↩

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?