【问题标题】:object(car) detection in opencv pythonopencv python中的对象(汽车)检测
【发布时间】:2017-03-29 08:28:37
【问题描述】:

我正在研究我的一个大学项目,即 opencv python 中的对象(汽车)检测,我使用的是 opencv 3 和 python 3.4。我有一个代码,但是当我运行代码时,不显示输出。它表明代码没有错误,但仍然无法获得输出。我是图像处理的新手,所以如果有人试图解决我的问题,这将是一个很大的帮助。代码如下`

import cv2
import numpy as np
import argparse
ap = argparse.ArgumentParser()
ap.add_agrument("-v","--video",
help = "path to the (optional) video file")
args = vars(ap.parse_agrs())
camera = cv2.VideoCapture(agrs["video"])
car_cascade = cv2.CascadeClassifier("cars.xml")
while true:
ret,frames = camera.read(),cv2.rectangle()
gray = cv2.cvtColor(frames, cv2.COLOR_BGR2GRAY)
cars = car_cascade.detectionMultiScale(gray, 1.1,1)
for (x,y,w,h) in cars:
cv2.rectangular()frames,(x,y),(x+w,y+h), (0,0,255),2)
cv2.imshow ('video',frames)
cv2.waitkey(0)

【问题讨论】:

  • 您有严重的缩进问题。先检查一下
  • 你说你的代码没有错误,那么这个怎么办:cv2.rectangular()frames,(x,y),(x=w,y+h), (0,o,255),2) 不会抛出错误。我严重怀疑你运行了代码。
  • 让人怀疑缩进问题仅仅是因为在 SO 中粘贴时格式不佳,您至少有两个语法问题。第 11 行,缺少 coma b/n read()c2;第 15 行 - 方法 rectangular() 中的参数是 not(删除右括号 )
  • 逻辑错误 - 在 argparse 中您将 --video 标记为可选,但如果未提供第 8 行会发生什么。

标签: python opencv image-processing


【解决方案1】:

我只是删除了 argparse 命令并稍微编辑了代码,它运行良好。要查看输出,请单击此处:https://www.youtube.com/watch?v=phG9inHoAKg

并且代码文件上传到我的github账号https://github.com/Juzer2012/Car-detection

【讨论】:

    【解决方案2】:

    你写:“它表明代码没有错误”......

    不是(而且多次),例如这里:

      ap.add_agrument(...
    

    应该在哪里

      ap.add_argument(...
    

    再次检查更多此类语法错误。快乐编码:)。

    【讨论】:

    • 嘿,克劳迪奥 thnx 的评论,如果你能提供一个如何使用 argparse 加载视频进行图像处理的示例,那就太好了。正如您所评论的那样,尝试添加参数路径,但仍然没有得到输出。请帮助。
    【解决方案3】:

    这里是您请求的代码示例,它使用 argparse 进行图像处理 - 它适用于 python2.x 和 python3.x,在为此目的打开的窗口中显示用于处理的视频流。如果您可以看到视频流输出,只需将其标记为您的问题的有效答案。在此先感谢(y)。快乐编码:)。

    import cv2
    def showVideoStream_fromWebCam(argsVideo, webCamID=0, showVideoStream=True):
        cv2_VideoCaptureObj_webCam = cv2.VideoCapture(webCamID)
        while True:
            retVal, imshowImgObj = cv2_VideoCaptureObj_webCam.read()
            if showVideoStream: 
                imshowImgObj = cv2.flip(imshowImgObj, 1)
                cv2.imshow('webCamVideoStream', imshowImgObj)
            #:if
            if cv2.waitKey(1) == 27: 
                break  # [Esc] to quit
            #:if
        #:while        
        cv2.destroyAllWindows()
    #:def
    import argparse
    ap = argparse.ArgumentParser()
    ap.add_argument("-v","--video", help = "webCamID (= 0)")
    args = vars(ap.parse_args())
    showVideoStream_fromWebCam(args["video"])
    

    【讨论】:

    • 嘿克劳迪奥感谢您的回复,我尝试了您的代码并且运行良好,但问题是它无法通过视频文件读取,正如您的代码所说,如果视频文件条件不满足那么打开网络摄像头,所以每次我编辑并尝试您的代码时,它都会打开网络摄像头进行输入。我在 windows 10 上使用 opencv python,那他们有什么问题吗?
    • 尝试对所提供代码的最后一行进行以下更改:showVideoStream_fromWebCam(args["video"], "c:/fullPath/NameOf/yourVideoFile.avi") 以显示视频文件而不是网络摄像头视频流(视频运行速度非常快,除非您也将 cv2.waitKey(1) 更改为 for例如cv2.waitKey(100))。
    • 它显示这样的错误 showVideoStream_fromWebCam(args['video'],"C:/Users/Juzer/Desktop/python_10Day/video.avi") KeyError: 'video'
    • 如果尝试删除或编辑任何与此相关的内容,它会再次打开网络摄像头作为输入
    【解决方案4】:

    让我们以大约原始速度(25 帧/秒)运行视频,取出不需要的部分并先绘制所有矩形,然后显示帧,从而使代码更加完美:

    import cv2
    
    camera = cv2.VideoCapture("video.avi")
    car_cascade = cv2.CascadeClassifier('cars.xml')
    
    # Get frames per second from video file. Syntax depends on OpenCV version: 
    (major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')
    if int(major_ver)  < 3 :
        fps = camera.get(cv2.cv.CV_CAP_PROP_FPS)
    else :
        fps = camera.get(cv2.CAP_PROP_FPS)
    #:if
    intTimeToNextFrame=int(1000.0/fps)-12 # '-12' estimation of time for processing
    while True:
        (grabbed,frame) = camera.read()
        grayvideo = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cars = car_cascade.detectMultiScale(grayvideo, 1.1, 1)
        for (x,y,w,h) in cars:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,255),1)
        cv2.imshow("video",frame)
        if cv2.waitKey(intTimeToNextFrame)== ord('q'):
            break
    camera.release()
    cv2.destroyAllWindows()
    

    【讨论】:

      猜你喜欢
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多