Я пытаюсь использовать OpenCV и Python для обнаружения круговых фигур в захвате веб-камеры. Im используя преобразование Hough для обнаружения круга, которое в нем заняло несколько часов для меня, чтобы выяснить (и который я до сих пор не уверен, действительно ли у меня есть). В любом случае, моя текущая проблема заключается в использовании правильного типа объектов в разных вызовах функций. Я отправил свой код ниже для справки. Когда я запускаю этот код я получаю следующую ошибкуTypeError: ожидается односегментный объект буфера
Traceback (most recent call last): File "test1.py", line 19, in <module> cv.Canny(gray, edges, 50, 200, 3) TypeError: expected a single-segment buffer object
Что это значит? Я попытался посмотреть вокруг разных потоков, чтобы понять это, но я не могу найти подходящего объяснения.
Я новичок в OpenCV и буду очень признателен за любую простую разработку того, что может быть причиной моей проблемы. Заранее спасибо.
import cv
import cv2
import numpy as np
#Starting camera capture
capture = cv.CaptureFromCAM(0)
while True:
img = cv.QueryFrame(capture)
#Allocating grayscale- and edge-images
gray = cv.CreateImage(cv.GetSize(img), 8, 1)
edges = cv.CreateImage(cv.GetSize(img), 8, 1)
#Transforming frame to grayscale image
cv.CvtColor(img, gray, cv.CV_BGR2GRAY)
#Preprocessing and smoothing
cv.Erode(gray, gray, None, 2)
cv.Dilate(gray, gray, None, 2)
cv.Smooth(gray, gray, cv.CV_GAUSSIAN, 9, 9)
#Edge detection (I believe this is where the exception is thrown)
cv.Canny(gray, edges, 50, 200, 3)
#Transforming original frame and grayscale image to numpy arrays
img = np.asarray(img[:,:])
gray = np.asarray(gray[:,:])
#Detecting circles and drawing them
circles = cv2.HoughCircles(gray,cv.CV_HOUGH_GRADIENT,1,10,100,30,5,20)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
cv2.circle(img,(i[0],i[1]),i[2],(0,255,0),1) # draw the outer circle
cv2.circle(img,(i[0],i[1]),2,(0,0,255),3) # draw the center of the circle
#Transforming original frame back to iplimage format for showing
img = cv.fromarray(img)
#Showing image and edge image
cv.ShowImage("Camera", img)
cv.ShowImage("Edges",edges)