【问题标题】:OpenCv code throws segmentation error(core dumped) Ubuntu 14.04OpenCv 代码抛出分段错误(核心转储)Ubuntu 14.04
【发布时间】:2014-11-23 21:10:39
【问题描述】:

我是初学者从官方文档http://docs.opencv.org/trunk/doc/py_tutorials/py_gui/py_video_display/py_video_display.html#display-video学习opencv

import numpy as np        
import cv2    

cap = cv2.VideoCapture(0)      
while(True):    
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

它给了我错误"Segmentation fault (core dumped)" 谁能告诉我为什么会这样以及如何解决这个问题?
提前致谢。

【问题讨论】:

  • 你的程序在哪一行崩溃了?
  • 我不知道如何找到它。当我运行该代码时,我得到的只是“分段错误(核心转储)”。
  • 尝试从您的代码中删除 cap.release() 行。来自文档:“在 C API 中,当您完成视频处理后,使用 cvReleaseCapture() 释放 CvCapture 结构,或使用在析构函数中自动调用 cvReleaseCapture() 的 Ptr。”这让我觉得内存是自动释放的,调用 cap.release() 会过早地删除一些东西。
  • 没用。给我同样的错误。
  • 在您的代码中添加检查:if(!cap.isOpened()) print 'error' 紧跟在cap.open() 之后。同时添加if(ret==False) print 'frame missing'

标签: python opencv ubuntu-14.04


【解决方案1】:

也许有点晚了,但“user3154952”说的是真的,当您使用 C++ api 时,您不需要使用 release 方法,它已经在视频捕获析构函数中。

这是我测试并运行良好的代码:

import sys
import cv2

cap = cv2.VideoCapture(0)

while(1):
    ret,frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == 27:
        break

cv2.destroyAllWindows()

更新: 我一直在搞乱我的 ps3 眼睛,我已经意识到,使用那个相机,你会因为只使用 destroyAllWindows 方法而出现分割错误,为了解决这个问题,我用 release 方法替换了 destroyAllWindows 方法并且工作正常,我不确切地知道为什么会发生这种情况,我只是在分享,以防有人遇到这个问题。我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2022-10-13
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多