<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          基于OpenCV的車輛變道檢測

          共 4470字,需瀏覽 9分鐘

           ·

          2020-11-28 16:27

          點(diǎn)擊上方AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂”

          重磅干貨,第一時間送達(dá)


          本期教程我們將和小伙伴們一起研究如何使用計算機(jī)視覺和圖像處理技術(shù)來檢測汽車在行駛中時汽車是否在改變車道!大家一定聽說過使用OpenCV 的haar級聯(lián)文件可以檢測到面部、眼睛等,但是如果目標(biāo)是汽車,公共汽車呢?


          01. 數(shù)據(jù)集

          我們將道路上汽車的視頻文件用作數(shù)據(jù)集。當(dāng)然可以使用圖像數(shù)據(jù)集檢測來汽車,但是由于汽車在變道時我們需要通過彈出窗口提供警報,因此對于這些動態(tài)情況,視頻輸入更為可行。


          02. 輸入

          第一步是提供要在本教程中使用的輸入-OpenCV的haar級聯(lián)文件,用于檢測汽車的坐標(biāo),道路上的汽車的視頻文件-

          cascade_src = 'cascade/cars.xml'video_src = 'dataset/cars.mp4'
          cap = cv2.VideoCapture(video_src)car_cascade = cv2.CascadeClassifier(cascade_src)

          cv2.VideoCapture()方法用于捕獲輸入視頻,視頻通常為每秒25個圖像/幀(fps)。捕獲輸入后,使用循環(huán)提取幀,并使用汽車的haar級聯(lián)文件檢測到的坐標(biāo),我們在循環(huán)中在汽車周圍繪制一個矩形,以在對捕獲的幀執(zhí)行其他操作時獲得一致性。

          while(1):# Take each frame    _, frame = cap.read()    cars = car_cascade.detectMultiScale(frame, 1.1, 1)for (x,y,w,h) in cars:        roi = cv2.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),2)   #ROI is region of interest

          在OpenCV中,使用BGR而不是RGB,因此(0,0,255)將在汽車上繪制一個紅色矩形,而不是藍(lán)色。


          03. 圖像處理

          如果幀的分辨率很高,則會減慢執(zhí)行的操作,此外,該幀還包含噪聲,可以使用模糊降低噪聲,這里使用高斯模糊。

          3.1 HSV框架

          在此,我們使用從cv2.VideoCapture()捕獲的幀中獲得的HSV幀僅突出顯示汽車轉(zhuǎn)彎的點(diǎn),并遮擋其余道路和在道路上直行的汽車。設(shè)置上限和下限閾值是為了定義HSV中的顏色范圍,以查看汽車改變車道的點(diǎn),并用作框架的遮罩。以下是用于獲取此代碼的代碼段-


          #canceling noise in the video frames using blurframe = cv2.GaussianBlur(frame,(21,21),0) # Convert BGR to HSVhsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # define range of color in HSV to see the points at which the car is changing angleslower_limit = np.array([0,150,150])upper_limit = np.array([10,255,255]) # Threshold the HSV image to get only the thresholded colorsmask = cv2.inRange(hsv, lower_limit, upper_limit)

          3.2腐蝕與膨脹

          腐蝕和膨脹是圖像處理中常使用的兩個基本形態(tài)學(xué)操作。腐蝕算子在內(nèi)核區(qū)域上具有局部最小值的作用。腐蝕用于減少圖像中的斑點(diǎn)噪聲,斑點(diǎn)會從圖像中的對象邊界腐蝕掉。膨脹具有局部最大值運(yùn)算符的作用。當(dāng)添加像素以平滑圖像中對象的邊界時,將使用膨脹來重新獲得一些丟失的區(qū)域。現(xiàn)在,通過基本形態(tài)學(xué)操作(腐蝕和膨脹)處理從HSV幀的第一步生成的蒙版。通過將幀和掩碼之間的按位與運(yùn)算應(yīng)用于獲取 ROI(感興趣區(qū)域),可以生成結(jié)果幀。

              kernel = np.ones((3,3),np.uint8)    kernel_lg = np.ones((15,15),np.uint8)    # image processing technique called the erosion is used for noise reduction    mask = cv2.erode(mask,kernel,iterations = 1)    # image processing technique called the dilation is used to regain some lost area    mask = cv2.dilate(mask,kernel_lg,iterations = 1)    # Bitwise-AND to get black everywhere else except the region of interest    result = cv2.bitwise_and(frame,frame, mask= mask)

          3.3車道檢測

          canny邊緣檢測器與霍夫線變換一起用于檢測車道。

          canny邊緣檢測(作者提供的圖像)


          04. 邊緣檢測


          諸如canny邊緣檢測器之類的算法用于查找將圖像中的邊緣像素,但是由于我們無法融合某些點(diǎn)和邊緣,因此它無法找到實(shí)際對象,在這里我們可以使用OpenCV中的cv2.findContours()實(shí)現(xiàn)輪廓的查找。

          定義-“輪廓是代表圖像中曲線的點(diǎn)的列表。”?等高線由序列表示(序列是結(jié)構(gòu)的鏈表),每個序列都編碼有關(guān)下一點(diǎn)位置的信息。我們在ROI中多次運(yùn)行cv2.findContours()以獲得實(shí)體,然后使用cv2.drawContours()繪制輪廓區(qū)域。等高線可以是點(diǎn),邊,多邊形等,因此在繪制等高線時,我們進(jìn)行多邊形近似,以找到邊的長度和區(qū)域的面積。函數(shù)cv2.drawContours()的工作方式是從根節(jié)點(diǎn)開始繪制一棵樹(數(shù)據(jù)結(jié)構(gòu)),然后將后續(xù)點(diǎn),邊界框和freeman鏈代碼連接在一起。

          找到輪廓后的另一個重要任務(wù)是匹配它們。輪廓匹配意味著我們有兩個單獨(dú)的計算輪廓相互比較,或者輪廓與抽象模板相比較。

          thresh = maskcontours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)# define a minimum area for a contour (ignoring all values below min)min_area = 1000cont_filtered = []# filter out all contours below a min_areafor cont in contours:  if cv2.contourArea(cont) > min_area:    cont_filtered.append(cont)
          cnt = cont_filtered[0]# draw the rectangles around contoursrect = cv2.minAreaRect(cnt)box = cv2.boxPoints(rect)box = np.int0(box)cv2.drawContours(frame,[box],0,(0,0,255),2)rows,cols = thresh.shape[:2][vx,vy,x,y] = cv2.fitLine(cnt, cv2.DIST_L2,0,0.01,0.01)lefty = int((-x*vy/vx) + y)righty = int(((cols-x)*vy/vx)+y)cv2.line(frame,(cols-1,righty),(0,lefty),(0,255,0),2)



          05. 中心矩


          我們可以通過計算輪廓矩來比較兩個輪廓。“中心矩是通過將輪廓的所有像素相加而得出的輪廓的總體特征。”

          中心矩型-

          • 空間矩:?m00,m10,m01,m20,m11,m02,m30,m21,m12,m03。

          • 中心矩:?mu20,mu11,mu02,mu30,mu21,mu12,mu03。

          • Hu矩:有七個Hu矩(h0 — h6)或(h1 — h7),兩種表示法都使用。

          我們使用cv2.fitEllipse()計算矩并將橢圓擬合在這些點(diǎn)上。從輪廓和力矩中得出角度,因?yàn)楦淖冘嚨佬枰?5度旋轉(zhuǎn),這被認(rèn)為是汽車轉(zhuǎn)彎角度的閾值。

          現(xiàn)在,我們不僅可以打印檢測變化的車道,還可以使用Tkinter作為一個簡單的彈出窗口來提醒更改。

          使用Greenline測量角度,并在框架中的汽車上繪制矩形

          彈出警報(作者提供的圖片)

          輸出


          06. 總結(jié)


          在本教程中,使用車道變更檢測方法探索了智能汽車導(dǎo)航的小型演示。計算機(jī)視覺正在迅速發(fā)展,其應(yīng)用不僅在汽車的本地導(dǎo)航中而且在火星導(dǎo)航和產(chǎn)品檢查領(lǐng)域中也在不斷發(fā)展,甚至醫(yī)療應(yīng)用也正在開發(fā)中,并可以在早期用于檢測X射線圖像中的癌癥和腫瘤階段。


          代碼鏈接:https://github.com/Hitesh-Valecha/Car_Opencv

          參考文獻(xiàn):

          1. Bradski, Gary and Kaehler, Adrian,?Learning OpenCV: Computer Vision in C++ with the OpenCV Library, O’Reilly Media, Inc., 2nd edition, 2013, @10.5555/2523356, ISBN — 1449314651.

          2. Laganiere, Robert, OpenCV Computer Vision Application Programming Cookbook, Packt Publishing, 2nd edition, 2014, @10.5555/2692691, ISBN — 1782161481.


          下載1:leetcode?開源


          AI算法與圖像處理」公眾號后臺回復(fù):leetcode,即可下載。每題都 runtime beats 100% 的開源好書,你值得擁有!



          下載2 CVPR2020

          AI算法與圖像處公眾號后臺回復(fù):CVPR2020即可下載1467篇CVPR?2020論文
          個人微信(如果沒有備注不拉群!
          請注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱


          覺得不錯就點(diǎn)亮在看吧


          瀏覽 47
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩AV无码专区亚洲AV | 曰批免费视频 | 亚洲成人视频网 | 黄 色 成 人 免费 视频 黄色视频网站日本大全免费看 | 草榴视频国产 |