首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python/OpenCV :摄像机视频流的激光曲线分析

Python/OpenCV :摄像机视频流的激光曲线分析
EN

Stack Overflow用户
提问于 2014-11-26 13:12:25
回答 1查看 779关注 0票数 0

早上好,

我目前正试图通过在表面上发送激光片并收集其反射来研究液体表面的实时变形。我得到的通常是一个明亮的曲线在每一个时间步,我希望分析它的坐标。

因此,我编写了一个Python脚本,它显示在下面(分析部分是从laser curved line detection using opencv and python中重新获得的,因为它几乎完全代表了我想要做的事情,只是我正在处理一个视频流):

代码语言:javascript
复制
import cv2
from PIL import Image
import cv2.cv as cv
import numpy as np
import time

myfile = open("hauteur.txt","w")

#Import camera flow

class Target:

   def __init__(self):
      self.capture = cv.CaptureFromCAM(0)
      cv.namedWindow("Target", 1)
      cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FRAME_WIDTH, 150)
      cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FRAME_HEIGHT, 980)
      cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FPS, 60 )

   def run(self):
      frame = cv.QueryFrame(self.capture)
      frame_size = cv.GetSize(frame)
      color_image_cv = cv.CreateImage(cv.GetSize(frame), 8, 3)
      color_image = np.array(color_image_cv)
      grey_image = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_8U, 1)
      first = True
      t = time.clock()

      # Frame analysis

      while True:

           ret, bw = cv2.threshold(color_image, 0, 255, cv2.THRESH_BINARY)
           contours, hierarchy = cv2.findContours(bw, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)                        
           curves = np.zeros((img.shape[0], img.shape[1], 3), np.uint8) 

           for i in range(len(contours)):
                for col in range(draw.shape[1]):
                     M = cv2.moments(draw[:, col])
                     if M['m00'] != 0:
                          x = col
                          y = int (M['m01']/M['m00'])
                          curves[y, x, :] = (0, 0, 255)
                     res = {'X' : x, 'Y' : y, 't' : t}
                     print res
                     myfile.write('{X}\t{Y}\t{t}'.format(**res))
                     myfile.write("\n")

           cv2.ShowImage("Target", color_image)
           # Listen for ESC key
           c = cv2.WaitKey(7) % 0x100
           if c == 27:
                   break   


if __name__=="__main__":
   t = Target()
   t.run()

然而,在相同的代码中使用cv和cv2函数似乎带来了很大的混乱,我得到了错误。

代码语言:javascript
复制
src data type = 17 is not supported

离线

代码语言:javascript
复制
ret, bw = cv2.threshold(color_image, 0, 255, cv2.THRESH_BINARY)

我理解这源于cv和cv2函数创建和存储图像的方式,但我尝试的任何转换过程似乎都不起作用,而且我也没有在我的视频流导入部分中找到可以插入的等效cv2函数(但是,正如您可能理解的,我显然不是一个编程专家,我可能已经跳过了文档中我需要的内容)。那么,是否有办法调和这些cv和cv2函数,或获得与cv2函数等效的相机流?

额外的问题:像这样的脚本运行的速度有多快(考虑到我最终需要以300到400 fps的速度运行,我甚至不确定这是否真的可行)?

谢谢你的关注

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-26 13:36:46

好的,cv2视频代码:

代码语言:javascript
复制
   def __init__(self):
      self.capture = cv2.VideoCapture(0)
      cv2.namedWindow("Target", 1)
      self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, 150)
      self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 980)
      self.capture.set(cv2.CAP_PROP_FPS, 60 )

   def run(self):
      ok, frame = self.capture.read()
      gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY);
      ...

额外的问题: ofc,它只能以捕获所提供的速度运行。300 more看起来很荒谬,30 more更有可能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27150169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档