資源簡(jiǎn)介
此部分的代碼是飛控循跡的openmv代碼。openmv代碼能夠識(shí)別直線,直角,T路口,十字路口

代碼片段和文件信息
class?GeometryFeature:
????def?__init__(self?img):
????????self.img?=?img
????@staticmethod
????def?trans_line_format(line):
????????‘‘‘
????????將原來(lái)由兩點(diǎn)坐標(biāo)確定的直線,轉(zhuǎn)換為?y?=?ax?+?b?的格式
????????‘‘‘
????????x1?=?line.x1()
????????y1?=?line.y1()
????????x2?=?line.x2()
????????y2?=?line.y2()
????????if?x1?==?x2:
????????????#?避免完全垂直,x坐標(biāo)相等的情況
????????????x1?+=?0.1
????????#?計(jì)算斜率?a
????????a?=?(y2?-?y1)?/?(x2?-?x1)
????????#?計(jì)算常數(shù)項(xiàng)?b
????????#?y?=?a*x?+?b?->?b?=?y?-?a*x
????????b?=?y1?-?a?*?x1
????????return?ab
????@staticmethod
????def?calculate_angle(line1?line2):
????????‘‘‘
????????利用四邊形的角公式,?計(jì)算出直線夾角
????????‘‘‘
????????angle??=?(180?-?abs(line1.theta()?-?line2.theta()))
????????if?angle?>?90:
????????????angle?=?180?-?angle
????????return?angle
????@staticmethod
????def?find_verticle_lines(lines?angle_threshold=(70?90)):
????????‘‘‘
????????尋找相互垂直的兩條線
????????‘‘‘
????????return?GeometryFeature.find_interserct_lines(lines?angle_threshold=angle_threshold)
????@staticmethod
????def?find_interserct_lines(lines?angle_threshold=(1090)?window_size=None):
????????‘‘‘
????????根據(jù)夾角閾值尋找兩個(gè)相互交叉的直線,?且交點(diǎn)需要存在于畫面中
????????‘‘‘
????????line_num?=?len(lines)
????????for?i?in?range(line_num?-1):
????????????for?j?in?range(i?line_num):
????????????????#?判斷兩個(gè)直線之間的夾角是否為直角
????????????????angle?=?GeometryFeature.calculate_angle(lines[i]?lines[j])
????????????????#?判斷角度是否在閾值范圍內(nèi)
????????????????if?not(angle?>=?angle_threshold[0]?and?angle?<=??angle_threshold[1]):
????????????????????continue
????????????????#?判斷交點(diǎn)是否在畫面內(nèi)
????????????????if?window_size?is?not?None:
????????????????????#?獲取串口的尺寸?寬度跟高度
????????????????????win_width?win_height?=?window_size
????????????????????#?獲取直線交點(diǎn)
????????????????????intersect_pt?=?GeometryFeature.calculate_intersection(lines[i]?lines[j])
????????????????????if?intersect_pt?is?None:
????????????????????????#?沒(méi)有交點(diǎn)
????????????????????????continue
????????????????????x?y?=?intersect_pt
????????????????????if?not(x?>=?0?and?x?=?0?and?y?????????????????????????#?交點(diǎn)如果沒(méi)有在畫面中
????????????????????????continue
????????????????return?(lines[i]?lines[j])
????????return?None
????@staticmethod
????def?calculate_intersection(line1?line2):
????????‘‘‘
????????計(jì)算兩條線的交點(diǎn)
????????‘‘‘
????????a1?=?line1.y2()?-?line1.y1()
????????b1?=?line1.x1()?-?line1.x2()
????????c1?=?line1.x2()*line1.y1()?-?line1.x1()*line1.y2()
????????a2?=?line2.y2()?-?line2.y1()
????????b2?=?line2.x1()?-?line2.x2()
????????c2?=?line2.x2()?*?line2.y1()?-?line2.x1()*line2.y2()
????????if?(a1?*?b2?-?a2?*?b1)?!=?0?and?(a2?*?b1?-?a1?*?b2)?!=?0:
????????????cross_x?=?int((b1*c2-b2*c1)/(a1*b2-a2*b1))
????????????cross_y?=?int((c1*a2-c2*a1)/(a1*b2-a2*b1))
????????????return?(cross_x?cross_y)
????????return?None
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????3118??2019-07-28?11:33??Openmv\GeometryFeature.py
?????文件???????5414??2019-07-28?11:33??Openmv\main.py
?????目錄??????????0??2019-07-28?11:33??Openmv
-----------?---------??----------?-----??----
?????????????????8532????????????????????3
評(píng)論
共有 條評(píng)論