こんなに長い歴史を持つライブラリなのに日本語での情報がないので一応.
tl;dr
たぶん,ホスト(Windows)のカメラはYUVで,WSL内のOpenCVはRGBで解釈しようとして不整合.
するとこういうことになる.
環境
- Windows 11
- WSL 2
- Ubuntu 24.04.4 LTS
- Python 3.14.5
- OpenCV (Python) 5.0.0.93
対策方法
始めバックエンドの指定が間違っているのかと思ったが,そうではなかった.
問題はFourCC が指定されていないこと.VideoCaptureオブジェクトに,MJPEGなど適当な形式を明示的に指定してやると解決した(参考).
while True:
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc(*"MJPG"))
# etc...
これにより,ただのデータの列ではなく正式なJPEG画像(の列)としてデータが再編されるため,Windwos-WSLという過酷な環境でも生き残ってくれるらしい.(参考)
あとがき
正直詳しいことはよくわからない.今は忙しいのでもうちょい習熟してからちゃんと調べなおす.
