2

/ dev/videoデバイスからのピクセルの違いを検出することになっている簡単なアプリケーションを書いてみました。動きのように。

/ dev / videoデバイスがどのように機能するかわからないので、ほとんどは当て推量でした。私が見つけたのは、(特定のWebカメラからの)データを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
4

2 に答える 2

2

/dev/video からの読み取りは簡単ではありません。これには特定のライブラリを使用することをお勧めします。たぶん、OpenCV lib を試すことができます。ウェブカメラやカメラの生のピクセルへの簡単なインターフェイスを備えています。

于 2010-08-13T07:07:31.847 に答える
1

私はそのトピックについて何も知りませんが、多分これは当てはまりますか?
各バイトの意味を説明するドキュメントと、Cのコードサンプルがあります。

http://v4l2spec.bytesex.org

于 2010-08-13T07:12:10.170 に答える