6

簡単なプロジェクトを 1 つ作成する必要があり、opencv、ruby、および mac を使用しています。brew で opencv をインストールし、gem install で rb_webcam をインストールしました。

# -*- coding: utf-8 -*-

require "opencv"
require "rb_webcam"

capture = Webcam.new

このコードはスローします

$ ruby tracking.rb
/Users/evilgeniuz/.rvm/gems/ruby-1.9.3-p125/gems/nice-ffi-0.4/lib/nice-ffi/library.rb:98:in `load_library': Could not load highgui. (LoadError)
    from /Users/evilgeniuz/.rvm/gems/ruby-1.9.3-p125/gems/rb_webcam-0.3.0/lib/rb_webcam.rb:7:in `<module:Highgui>'
    from /Users/evilgeniuz/.rvm/gems/ruby-1.9.3-p125/gems/rb_webcam-0.3.0/lib/rb_webcam.rb:4:in `<top (required)>'
    from /Users/evilgeniuz/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/rubygems/custom_require.rb:59:in `require'
    from /Users/evilgeniuz/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/rubygems/custom_require.rb:59:in `rescue in require'
    from /Users/evilgeniuz/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
    from tracking.rb:4:in `<main>'

highgui がどこにあるのかわかりません。

UPD: https://github.com/TyounanMOTI/rb_webcamから gem をダウンロードし、手動でビルドしてインストールすることで解決しました。

4

5 に答える 5

4

どのラッパーを使用しているかわかりませんが、これを見てください: Ruby/OpenCV - An OpenCV Ruby wrapper

顔検出サンプル:

#!/usr/bin/env ruby

require 'opencv'

include OpenCV

# Load an image
img = IplImage.load('sample.jpg')

# Load the cascade for detecting faces
detector = CvHaarClassifierCascade::load('haarcascade_frontalface_alt.xml.gz')

# Detect faces and draw rectangles around them
detector.detect_objects(img) do |rect|
  img.rectangle!(rect.top_left, rect.bottom_right, color: CvColor::Red)
end

# Create a window and show the image
window = GUI::Window.new('Face Detection')
window.show(img)
GUI::wait_key

分類子はここからダウンロードできます。

編集

次のコードは、OpenCV、rb_webcam gem、および RMagick を使用して、Web カメラから画像をキャプチャし、jpg ファイルとして保存します。

require 'rb_webcam'
require 'RMagick'

capture = Webcam.new

image = capture.grab
width = image.size[:width]
rows = image.data.unpack("C*").each_slice(3).to_a.each_slice(width).to_a
capture.close

height = rows.length
img = Magick::Image.new width, height

rows.each_with_index do |r, i|
q = r.map {|b, g, r| Magick::Pixel.new r * 256, g * 256, b * 256, 0}
img.store_pixels(0, i, width, 1, q)
end

img.format = 'jpg'
img.write 'webcam.jpg' 
于 2012-04-18T18:52:56.427 に答える
2

たぶん手遅れかもしれませんが、私もウェブカメラを動作させるのに苦労していました。

#!/usr/bin/env ruby

require "rubygems"
gem "ruby-opencv"

require "opencv"

window = OpenCV::GUI::Window.new("webcam")
capture = OpenCV::CvCapture.open

while true
  key = OpenCV::GUI::wait_key(1)
  image = capture.query
  window.show image

  next unless key
    case key.chr
  when "\e"
    exit
  end
end

これが役立つことを願ってrb_webcamいます.1週間以上のhighguiトラブルの後にあきらめたからです.

于 2016-03-25T23:23:42.913 に答える
0

少なくとも Windows では、rb_webcam.rb の 7 行目で次のように、load_library でバージョン番号を指定する必要があります。

load_library("opencv_highgui2413")
于 2016-10-11T05:19:35.000 に答える