2016-03-27 3 views
0

Хорошо, были вопросы об этом здесь, и я пробовал их все - но никто не работал на меня.Ошибка неподдерживаемого или непризнанного типа массива в OpenCV 3.1 в Python

Вот код:

import cv2 
import numpy as np 
img = cv2.imread('circleTest.jpg',0) 
img = cv2.medianBlur(img,5) 
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) 

circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20, param1=50,param2=30,minRadius=0,maxRadius=0) 

circles = np.uint16(np.around(circles)) 
for i in circles[0,:]: 
# draw the outer circle 
    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2) 
# draw the center of the circle 
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3) 

cv2.imshow('detected circles',cimg) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

Код заимствовано из tutorial about HoughCircles. Всякий раз, когда я пытаюсь запустить код, я получаю сообщение об ошибке

Неподдерживаемый или непризнанный тип массива (вы должны были увидеть всю ошибку).

Я пробовал копировать DLL, помещая изображение в рабочий каталог, давая путь к изображению, но ничего хорошего. Я могу запускать другие программы, такие как обнаружение объектов, на Python и C/C++.

Любая помощь была бы принята с благодарностью.
Спасибо!

ответ

0

OpenCV Logo as example picture

я могу запустить слегка измененный код без проблем с использованием OpenCV логотипа выше в качестве входного изображения.

В вашем исходном коде отсутствовал отступ в круге, который я исправил.

import cv2 
import numpy as np 
img = cv2.imread('circleTest.jpg') 
img = cv2.medianBlur(img,5) 

gimg = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 

circles = cv2.HoughCircles(gimg,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=10,maxRadius=50) 

circles = np.uint16(np.around(circles)) 
for i in circles[0,:]: 
# draw the outer circle 
    cv2.circle(img,(i[0],i[1]),i[2],(0,255,0),2) 
# draw the center of the circle 
    cv2.circle(img,(i[0],i[1]),2,(0,0,255),3) 

cv2.imshow('detected circles',img) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

Полученное изображение: enter image description here

[EDIT] Я изменил свой код так, что он работает на оригинальном изображении. Единственное, что я сделал, это ограничение значений радиуса поиска до minRadius = 10, maxRadius = 50. Я не знаю, что вы ищете, я не вижу, чтобы много кругов :-)

+0

Отсутствие отступов? Вы имеете в виду, что линия преобразования hough распалась на 2 части? Я сделал это в одной строке и попробовал свой код, но не повезло. И да, я сожалею о картине, я так поспешно опубликовал ее, что забыл о самой картине, вот она: https://onedrive.live.com/redir?resid=EEABAA7CDCB08F75!29989&authkey=!AOIl5VBnlm_prIg&v=3&ithint= photo% 2cjpg Спасибо! –

+0

Я получил код для работы, была проблема с отступом внутри цикла for. Я могу запустить ваше изображение и другое изображение jpg opencv, но когда я пытаюсь запустить свой образ, программа просто сидит и ничего не делает. @tfv –

+0

Я не дождался завершения исполнения на вашем исходном изображении, но он работал после того, как я изменил ваше изображение на 25% с помощью Irfanview. Тем не менее, я получаю множество кругов, поэтому он все еще медленный. Попробуйте уменьшить размер изображения, это позволит вам точно настроить параметры. – tfv