我有一个使用OpenCV的网络摄像头,我正在尝试实时拟合椭圆。
我目前正在使用的代码可以使用,但很多时候它无法使椭圆适合图像。我可以采用哪种椭圆拟合图像的方法?
当前代码:
def find_ellipses(img): #img is grayscale image of what I want to fit
ret,thresh = cv2.threshold(img,127,255,0)
_,contours,hierarchy = cv2.findContours(thresh, 1, 2)
if len(contours) != 0:
for cont in contours:
if len(cont) < 5:
break
elps = cv2.fitEllipse(cont)
return elps #only returns one ellipse for now
return None
其中elps
的格式为(x_centre,y_centre),(minor_axis,major_axis),angle
以下是我想成功拟合椭圆的示例。当我不想要它时,我当前的代码会失败。
答案 0 :(得分:3)
原来我错了就是从函数中得到第一个椭圆。虽然我认为第一个计算的椭圆是最正确的椭圆,但我实际要做的就是遍历所有的椭圆 - 并选择最合适的椭圆来限制图像中的对象。
答案 1 :(得分:0)
我会在函数之外定义我的轮廓,因为您不需要在此图像中重新定义它们。
<logger name="com.business.logic" level="DEBUG"/>
<logger name="org.apache.ibatis.logging.jdbc.BaseJdbcLogger" level="DEBUG" />
<logger name="org.springframework.http.client.support" level="DEBUG" />
<logger name="org.springframework.web.client" level="DEBUG" />
这段代码正在做的是我拍摄我的阈值图像流并在其上添加一个椭圆。稍后在我的代码中,当我想调用它时,我使用行
def create_ellipse(thresh,cnt):
ellipse = cv2.fitEllipse(cnt)
thresh = cv2.ellipse(thresh,ellipse,(0,255,0),2)
return thresh