繁体   English   中英

视频上的cv2.hough圈错误

[英]cv2.hough circles error on video

当我运行cv2.HoughCircles()时出现错误

Traceback (most recent call last):
  File "cv.py", line 1, in <module>
    import cv2,cv
  File "/home/jestinjoy/cv.py", line 19, in <module>
    circles = np.uint16(np.around(circles))
  File "/usr/lib/pymodules/python2.7/numpy/core/fromnumeric.py", line 2277, in around
    return _wrapit(a, 'round', decimals, out)
  File "/usr/lib/pymodules/python2.7/numpy/core/fromnumeric.py", line 37, in _wrapit
    result = getattr(asarray(obj),method)(*args, **kwds)
AttributeError: rint

我的代码是

GNU nano 2.2.6文件:cv.py

import cv2,cv
import numpy as np

cv2.namedWindow("preview")
vc = cv2.VideoCapture(0)

if vc.isOpened(): # try to get the first frame
    rval, frame = vc.read()
else:
    rval = False

while rval:
        cv2.imshow("preview", frame)
        rval, frame = vc.read()
        img = cv2.medianBlur(frame,5)
        imgg = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
        cimg = cv2.cvtColor(imgg,cv2.COLOR_GRAY2BGR)
        circles = cv2.HoughCircles(imgg,cv2.cv.CV_HOUGH_GRADIENT,1,10,param1=100,param2=30,minRadius=5,maxRadius=20)
        circles = np.uint16(np.around(circles))
        for i in circles[0,:]:
               cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),1) # draw the outer circle
               cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3) # draw the center of the circle
        key = cv2.waitKey(20)
        if key == 27: # exit on ESC
                break
cv2.destroyWindow("preview")

您没有检查自己的圈子是否为“无”。 如果您这样做,它将起作用:

import cv2
import numpy as np

cv2.namedWindow("preview")
vc = cv2.VideoCapture(0)

if vc.isOpened(): # try to get the first frame
    rval, frame = vc.read()
else:
    rval = False

while rval:
        cv2.imshow("preview", frame)
        cv2.waitKey(1)
        rval, frame = vc.read()
        img = cv2.medianBlur(frame,5)
        imgg = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
        cimg = cv2.cvtColor(imgg,cv2.COLOR_GRAY2BGR)
        circles = cv2.HoughCircles(imgg,cv2.cv.CV_HOUGH_GRADIENT,1,10,param1=100,param2=30,minRadius=5,maxRadius=20)
        if circles is None:
                continue
        print circles
        #circles = np.uint16(np.around(circles))
        for i in circles[0,:]:
               cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),1) # draw the outer circle
               cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3) # draw the center of the circle
        key = cv2.waitKey(20)
        if key == 27: # exit on ESC
                break
cv2.destroyWindow("preview")

产生的输出:

sam@tuwien:/tmp$ python cv.py 
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
[[[ 335.5         368.5          10.12422848]]]
[[[ 334.5         386.5          10.12422848]]]
[[[ 349.5         382.5          10.12422848]]]
[[[ 392.5         365.5          10.12422848]]]
[[[ 378.5         370.5          10.12422848]]]
[[[ 378.5         368.5          12.34908867]]]
[[[ 391.5         369.5          14.57738018]]]
[[[ 379.5         370.5          10.12422848]]]

Sam是正确的,但是他的程序无法画圆。 解决方法:

import cv2
import numpy as np

cv2.namedWindow("preview")
vc = cv2.VideoCapture(0)

if vc.isOpened(): # try to get the first frame
    rval, frame = vc.read()
else:
    rval = False

while rval:
    cv2.waitKey(1)
    rval, frame = vc.read()
    img = cv2.medianBlur(frame,5)
    imgg = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    cimg = cv2.cvtColor(imgg,cv2.COLOR_GRAY2BGR)
    circles = cv2.HoughCircles(imgg,cv2.cv.CV_HOUGH_GRADIENT,1,10,param1=100,param2=30,minRadius=5,maxRadius=20)

    if circles is None:
        cv2.imshow("preview", frame)
        continue
    #circles = np.uint16(np.around(circles))

    for i in circles[0,:]:
       print i
       cv2.circle(frame,(i[0],i[1]),i[2],(0,255,0),1) # draw the outer circle
       cv2.circle(frame,(i[0],i[1]),2,(0,0,255),3) # draw the center of the circle

    cv2.imshow("preview", frame)

    key = cv2.waitKey(20)

    if key == 27: # exit on ESC
        break

cv2.destroyWindow("preview")

这段代码可能由于相同的更新而需要进行一些更改(显然是在2年之前问过的),所以我使用ret代替了rval,还对cv2的属性进行了一些更改。

import cv2
import numpy as np

cv2.namedWindow("preview")
vc = cv2.VideoCapture(0)

if vc.isOpened(): # try to get the first frame
   ret, frame = vc.read()
else:
   ret = False

while True :
   ret, frame = vc.read()
   img = cv2.medianBlur(frame,15)
   imgg = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
   cimg = cv2.cvtColor(imgg,cv2.COLOR_GRAY2BGR)
   circles =   cv2.HoughCircles(imgg,cv2.HOUGH_GRADIENT,1,120,param1=100,param2=30,minRadius=20,maxRadius=200)

   if circles is None:
       cv2.imshow("preview", frame)
       continue
   #circles = np.uint16(np.around(circles))

   for i in circles[0,:]:
      print i
      cv2.circle(frame,(i[0],i[1]),i[2],(0,255,0),1) # draw the outer circle
      cv2.circle(frame,(i[0],i[1]),2,(0,0,255),3) # draw the center of the circle

   cv2.imshow("preview", frame)

   if cv2.waitKey(1) & 0xFF == ord('q'):
       break

vc.release()
cv2.destroyWindow("preview")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM