Я ищу способ определения основных фигур из изображения с использованием открытого CV в Python.Обнаружение основных фигур с использованием Open CV
Это код, который я использовал для обнаружения основных изображений, который работает:
import numpy as np
import cv2
import webbrowser
img = cv2.imread('test3.png')
gray = cv2.imread('test3.png',0)
ret,thresh = cv2.threshold(gray,127,255,1)
contours,h = cv2.findContours(thresh,1,2)
for cnt in contours:
approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True), True)
print len(approx)
if len(approx)==5:
print "It's a pentagon = mortgages."
webbrowser.open('http://www.google.co.uk')
#cv2.drawContours(img,[cnt],0,255,-1)
elif len(approx)==3:
print "triangle"
cv2.drawContours(img,[cnt],0,(0,255,0),-1)
elif len(approx)==4:
print "square"
cv2.drawContours(img,[cnt],0,(0,0,255),-1)
elif len(approx) == 9:
print "half-circle"
cv2.drawContours(img,[cnt],0,(255,255,0),-1)
elif len(approx) > 15:
print "circle"
cv2.drawContours(img,[cnt],0,(0,255,255),-1)
#cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Однако выводит результат в два раза. Любой совет или пример, чтобы исправить это, будет очень признателен.
Что именно вы подразумеваете под * "выводит результат дважды" *? Просмотрите отступ в коде, это важно в Python. – jonrsharpe
, если у вас есть что-то вроде линейного треугольника (а не объекта, но контура) с другим цветом, чем фон, вы в итоге найдете два контура, один внутри и один на внешней стороне этих линий. Поскольку KeillRandor предлагает вам использовать параметры, чтобы найти только внешний контур, но в этом случае вы можете пропустить другие фигуры внутри этого контура (если, например, разрешен круг внутри квадрата). Возможно, вы можете просто отфильтровать удвоенные фигуры, если у вас есть знания о размере линии. Или вы можете попытаться вычислить «внутренние» контуры в дальнейших шагах. – Micka