理解“/ dev / video”输出

时间:2010-08-13 06:56:52

标签: ruby linux device video-processing

我尝试编写一个应该检测 / dev / video 设备的像素差异的简单应用程序。与 motion 一样。

我不知道/ dev / video设备是如何工作的,所以大部分都是猜测。我发现似乎数据(来自特定网络摄像头)可以分为8192个字节。我假设每个代表一个框架。每个“帧”的前+/600字节与前一帧相同。

如何将数据解释为可理解的像素矩阵?

参考的程序代码:

#!/usr/bin/ruby

# calculates a percentage difference between two array's
def percentage_difference( arrayA, arrayB )
  top_size = arrayA.size > arrayB.size ? arrayA.size : arrayB.size
  diff_elements = 0;
  0.upto( top_size - 1 ) do |i|
    diff_elements += 1 unless arrayA[i] == arrayB[i]
  end
  ( 1.0 * diffelements ) / top_size
end


cam = File.open( '/dev/video' );

lastframe = [];

while( true ) do
  # reads a frame from the open video device ( cam ) and converts to bytes;
  newframe = cam.readpartial( num_of_bytes_per_frame ).bytes.map { |b| b }

  # prints the percentage difference between the two frames
  puts percentage_difference( lastframe, newframe );

  lastframe = newframe;
end

2 个答案:

答案 0 :(得分:2)

从/ dev / video读取并不简单。 我建议使用特定的库。 也许你可以尝试OpenCV lib。它具有与网络摄像头和摄像头中的原始像素的简单接口。

答案 1 :(得分:1)

我对这个话题一无所知,但这可能适用吗? 有一个文档解释了每个字节的含义,以及C:

中的代码示例

http://v4l2spec.bytesex.org