0

我正在尝试使用 OpenCV 从网络摄像头中抓取帧。我也试过“奶酪”。两者都给了我一个非常奇怪的画面:扭曲的、错误的颜色。使用 mplayer 我能够找出正确的编解码器“yuy2”。甚至 mplayer 有时也会选择错误的编解码器(“yuv”),这使得它看起来就像使用 OpenCV / cheese 捕获图像一样。

我可以以某种方式告诉 OpenCV 使用哪个编解码器吗?

谢谢!

4

2 回答 2

0

在最新版本的opencv中,您可以使用与视频相同的fourcc样式代码设置相机的捕获格式。见http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture

它可能仍然需要一些试错,像 YUV、YUYV、YUY2 这样的术语在相机制造商、驱动程序制造商、操作系统、directshow 层和 opencv 中使用得有点松散!

于 2012-11-26T15:37:53.463 回答
0

OpenCV 自动选择第一个可用的捕获后端(参见此处)。可能是它没有自动使用 V4L2。

如果从源代码构建,-D WITH_V4L=ON也设置两者。-D WITH_LIBV4L=ON

为了设置要使用的像素格式,请设置CAP_PROP_FOURCC捕获的属性:

  capture = cv2.VideoCapture(self.cam_id, cv2.CAP_V4L2)
  scapture.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
  width = 1920
  height = 1080
  capture.set(cv2.CAP_PROP_FRAME_WIDTH, width)
  capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
于 2019-07-14T12:17:07.260 回答