OPENCV:查找线的方向/角度

时间:2019-01-13 15:28:52

标签: c++ opencv

我正在创建一个PapperSoccer项目,但是在寻找运动方向/线方向时遇到了问题。我正在使用HoughLinesP来检测线,并且它尽可能地工作。 我使用ROI,即在其中寻找一条线,然后相应地移动它。

到目前为止,我使用差值来计算方向。

class UploadGUI(tkinter.Tk):
    def __init__(self, master):
        tkinter.Tk.__init__(self, master)
        self.master = master
        self.item_state = True
        self.variation_state = True
        self.active_state = True
        self.barcode_state = True
        self.initialize()

    def initialize(self):
        ...
        if(isfile('.../checkbox-unchecked.png')):
            self.uncheckedimg = tkinter.PhotoImage(file='.../checkbox-unchecked.png')
        ...
        self.itemup_check = tkinter.Canvas(width=150,height=40,bg=self.bg
                                       , bd=0, highlightthickness=0)
        self.itemup_check.bind("<Button-1>", lambda event, item = self.itemup_check, check = self.item_state, image1 = self.uncheckedimg, image2 = self.checkedimg : self.switchImage(item, check, image1, image2))

        self.itemup_check.create_image(0,0,image=self.uncheckedimg,anchor="nw")
        self.itemup_check.grid(column=0, row=4,sticky="EW")
        ...


    def switchImage(self, element, check, image1, image2):
        print(id(check))
        for state in [self.item_state]:
            print(id(state))
            if(id(check) == id(state)):
                if(state):
                    element.create_image(0,0,image=image1,anchor="nw")
                else:
                    element.create_image(0,0,image=image2,anchor="nw")
                state = not state
                print(id(state))

然后我有几个条件,根据结果,检查线路的前进方向(北,东北,南等)

但是,当我将ROI超出图像范围时,就会出现问题。那么这些差异是不正确的,因此-错误地确定了运动的方向。

我可以通过其他方式做到吗?

https://imgur.com/a/BkSYyqw-该程序如何工作的照片

1 个答案:

答案 0 :(得分:0)

好吧...假设您必须从摄像机图像中识别:确保要检测的线(当前的球移动)始终完全在ROI内。也许您可以扩大ROI来覆盖整个比赛场地?并更改当前行的颜色?从霍夫结果线中,您可以选择线并测试每个结果线的第一个点是否感兴趣。

如果只有1条结果线,则表示检测成功,可以在其起点和终点使用Arc tangens公式来查找方向角( any 角,应为接近网格角,该事实可用于最终检查。

如果无法更改颜色,则仍然可以使用较大的ROI并跟踪所有行。任何 new 行都应为当前移动行。