你可以实时使用ruby-opencv的网络摄像头吗?

时间:2014-05-06 22:16:41

标签: c++ ruby opencv

我正在考虑建立一个快速而肮脏的脚本来帮助朋友。它需要进行网络摄像头输入并对其进行非常简单的计算(考虑像素随时间的增量亮度,相对计算简单)。

我目前倾向于c ++ like so以及opencv,但我很想知道,因为它是一个计算成本低廉的任务,(相对来说当然)如果有办法只需使用ruby-opencv或其他一些技术将其保存为脚本语言。

我已经找不到任何方法可以将实时网络摄像头图像导入到红宝石脚本中,因为我一直在寻找,但我很高兴我的搜索技能被证明不足精彩的SO社区!

到目前为止我看过的地方:

hornetseye

c++ script (what I'm leaning towards)

using an ffi

总结;有没有办法将实时webcamera图像导入ruby脚本以对它们执行简单的计算? (我在想opencv,但没有任何特定的想法。

3 个答案:

答案 0 :(得分:3)

使用ruby-opencv,您可以按如下方式捕捉和显示相机图像

#!/usr/bin/env ruby
require 'opencv'
include OpenCV
FPS = 30
input = CvCapture.open
win = GUI::Window.new 'video'
loop do
  img = input.query
  win.show img
  key = GUI.wait_key 1000 / FPS
  break if key and key.chr == "\e"
end

答案 1 :(得分:1)

OpenCV具有Python绑定,它将在底层调用本机C ++代码。他们还有很多关于如何使用Python API的教程。可以找到打开视频供稿的基本示例here,更长的教程列表是here。如果您有兴趣在OpenCV上做很多工作,我强烈建议您仔细查看。

第一篇教程的简短摘要:

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Do image processing here, using frame

    # Display the resulting frame
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

答案 2 :(得分:1)

使用hornetseye-v4l2hornetseye-xorg可以捕捉和显示像这样的相机图像

#!/usr/bin/env ruby
require 'hornetseye_v4l2'
require 'hornetseye_xorg'
include Hornetseye
input = V4L2Input.new
X11Display.show { input.read }