文章轉(zhuǎn)載于微信公眾號(hào):小白學(xué)視覺
作者: 努比
本期教程我們將和小伙伴們一起研究如何使用計(jì)算機(jī)視覺和圖像處理技術(shù)來檢測汽車在行駛中時(shí)汽車是否在改變車道!大家一定聽說過使用OpenCV 的haar級(jí)聯(lián)文件可以檢測到面部、眼睛等,但是如果目標(biāo)是汽車,公共汽車呢?
01. 數(shù)據(jù)集
我們將道路上汽車的視頻文件用作數(shù)據(jù)集。當(dāng)然可以使用圖像數(shù)據(jù)集檢測來汽車,但是由于汽車在變道時(shí)我們需要通過彈出窗口提供警報(bào),因此對(duì)于這些動(dòng)態(tài)情況,視頻輸入更為可行。
02. 輸入
第一步是提供要在本教程中使用的輸入-OpenCV的haar級(jí)聯(lián)文件,用于檢測汽車的坐標(biāo),道路上的汽車的視頻文件-
cascade_src = 'cascade/cars.xml'
cv2.VideoCapture()方法用于捕獲輸入視頻,視頻通常為每秒25個(gè)圖像/幀(fps)。捕獲輸入后,使用循環(huán)提取幀,并使用汽車的haar級(jí)聯(lián)文件檢測到的坐標(biāo),我們?cè)谘h(huán)中在汽車周圍繪制一個(gè)矩形,以在對(duì)捕獲的幀執(zhí)行其他操作時(shí)獲得一致性。
while(1):
在OpenCV中,使用BGR而不是RGB,因此(0,0,255)將在汽車上繪制一個(gè)紅色矩形,而不是藍(lán)色。
03. 圖像處理
如果幀的分辨率很高,則會(huì)減慢執(zhí)行的操作,此外,該幀還包含噪聲,可以使用模糊降低噪聲,這里使用高斯模糊。
3.1 HSV框架
在此,我們使用從cv2.VideoCapture()捕獲的幀中獲得的HSV幀僅突出顯示汽車轉(zhuǎn)彎的點(diǎn),并遮擋其余道路和在道路上直行的汽車。設(shè)置上限和下限閾值是為了定義HSV中的顏色范圍,以查看汽車改變車道的點(diǎn),并用作框架的遮罩。以下是用于獲取此代碼的代碼段-
3.2腐蝕與膨脹
腐蝕和膨脹是圖像處理中常使用的兩個(gè)基本形態(tài)學(xué)操作。腐蝕算子在內(nèi)核區(qū)域上具有局部最小值的作用。腐蝕用于減少圖像中的斑點(diǎn)噪聲,斑點(diǎn)會(huì)從圖像中的對(duì)象邊界腐蝕掉。膨脹具有局部最大值運(yùn)算符的作用。當(dāng)添加像素以平滑圖像中對(duì)象的邊界時(shí),將使用膨脹來重新獲得一些丟失的區(qū)域?,F(xiàn)在,通過基本形態(tài)學(xué)操作(腐蝕和膨脹)處理從HSV幀的第一步生成的蒙版。通過將幀和掩碼之間的按位與運(yùn)算應(yīng)用于獲取 ROI(感興趣區(qū)域),可以生成結(jié)果幀。
kernel = np.ones((3,3),np.uint8)
3.3車道檢測
canny邊緣檢測器與霍夫線變換一起用于檢測車道。
canny邊緣檢測(作者提供的圖像)
04. 邊緣檢測
諸如canny邊緣檢測器之類的算法用于查找將圖像中的邊緣像素,但是由于我們無法融合某些點(diǎn)和邊緣,因此它無法找到實(shí)際對(duì)象,在這里我們可以使用OpenCV中的cv2.findContours()實(shí)現(xiàn)輪廓的查找。
定義-“輪廓是代表圖像中曲線的點(diǎn)的列表?!钡雀呔€由序列表示(序列是結(jié)構(gòu)的鏈表),每個(gè)序列都編碼有關(guān)下一點(diǎn)位置的信息。我們?cè)赗OI中多次運(yùn)行cv2.findContours()以獲得實(shí)體,然后使用cv2.drawContours()繪制輪廓區(qū)域。等高線可以是點(diǎn),邊,多邊形等,因此在繪制等高線時(shí),我們進(jìn)行多邊形近似,以找到邊的長度和區(qū)域的面積。函數(shù)cv2.drawContours()的工作方式是從根節(jié)點(diǎn)開始繪制一棵樹(數(shù)據(jù)結(jié)構(gòu)),然后將后續(xù)點(diǎn),邊界框和freeman鏈代碼連接在一起。
找到輪廓后的另一個(gè)重要任務(wù)是匹配它們。輪廓匹配意味著我們有兩個(gè)單獨(dú)的計(jì)算輪廓相互比較,或者輪廓與抽象模板相比較。
thresh = mask
05. 中心矩
我們可以通過計(jì)算輪廓矩來比較兩個(gè)輪廓?!爸行木厥峭ㄟ^將輪廓的所有像素相加而得出的輪廓的總體特征?!?/p>
中心矩型-
- 空間矩:m00,m10,m01,m20,m11,m02,m30,m21,m12,m03。
- 中心矩:mu20,mu11,mu02,mu30,mu21,mu12,mu03。
- Hu矩:有七個(gè)Hu矩(h0 — h6)或(h1 — h7),兩種表示法都使用。
我們使用cv2.fitEllipse()計(jì)算矩并將橢圓擬合在這些點(diǎn)上。從輪廓和力矩中得出角度,因?yàn)楦淖冘嚨佬枰?5度旋轉(zhuǎn),這被認(rèn)為是汽車轉(zhuǎn)彎角度的閾值。
現(xiàn)在,我們不僅可以打印檢測變化的車道,還可以使用Tkinter作為一個(gè)簡單的彈出窗口來提醒更改。
使用Greenline測量角度,并在框架中的汽車上繪制矩形
彈出警報(bào)(作者提供的圖片)
輸出
06. 總結(jié)
在本教程中,使用車道變更檢測方法探索了智能汽車導(dǎo)航的小型演示。計(jì)算機(jī)視覺正在迅速發(fā)展,其應(yīng)用不僅在汽車的本地導(dǎo)航中而且在火星導(dǎo)航和產(chǎn)品檢查領(lǐng)域中也在不斷發(fā)展,甚至醫(yī)療應(yīng)用也正在開發(fā)中,并可以在早期用于檢測X射線圖像中的癌癥和腫瘤階段。
代碼鏈接:https://github.com/Hitesh-Val.../_Opencv
參考文獻(xiàn):
- 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.
- Laganiere, Robert, OpenCV Computer Vision Application Programming Cookbook, Packt Publishing, 2nd edition, 2014, @10.5555/2692691, ISBN — 1782161481.
推薦閱讀
審核編輯:符乾江-
AI
+關(guān)注
關(guān)注
88文章
35164瀏覽量
280013 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5561瀏覽量
122799
發(fā)布評(píng)論請(qǐng)先 登錄
【Milk-V Duo S 開發(fā)板免費(fèi)體驗(yàn)】SDK編譯、人臉檢測、OpenCV測試
基于RK3576開發(fā)板的車輛檢測算法

如何用OpenCV的相機(jī)捕捉視頻進(jìn)行人臉檢測--基于米爾NXP i.MX93開發(fā)板

基于RV1126開發(fā)板的車輛檢測算法開發(fā)

快速部署!米爾全志T527開發(fā)板的OpenCV行人檢測方案指南
OpenCV行人檢測應(yīng)用方案--基于米爾全志T527開發(fā)板

為LSDK構(gòu)建opencv時(shí)遇到的問題求解
30多元實(shí)現(xiàn)車輛防碰撞?HLK-LD2451雷達(dá)模塊即可搞定

使用OpenVINO?模型的OpenCV進(jìn)行人臉檢測,檢測到多張人臉時(shí),伺服電機(jī)和步入器電機(jī)都發(fā)生移動(dòng)是為什么?
電動(dòng)變倍自動(dòng)對(duì)焦顯微鏡:半導(dǎo)體芯片檢測的精密之眼

WTR-562-X 霧區(qū)車輛檢測雷達(dá)
TLV2553檢測電壓時(shí),電壓值越高,采集的精度越差,跳變比較大,為什么?
如何用OpenCV的相機(jī)捕捉視頻進(jìn)行人臉檢測--基于米爾NXP i.MX93開發(fā)板
基于OPENCV的相機(jī)捕捉視頻進(jìn)行人臉檢測--米爾NXP i.MX93開發(fā)板

通過實(shí)時(shí)盲區(qū)檢測提高車輛安全性

評(píng)論