飛卡日常進度之攝像頭知識惡補

2021-08-16 18:22:22 字數 3972 閱讀 5200

1、閾值

閾值其實就是0/1的分界。大於閾值被二值化處理成1,小於閾值被二值化處理成0。

可以模擬微控制器的ttl和cmos兩種電平。

2、顯示攝像頭影象

在介面指定區域顯示 mcu 傳送回來的影象資料。其中 1:1 顯示畫素點,即按照設定的解析度進行原圖顯示;根據介面尺寸放大畫素,即在根據顯示區域的大小進行拉伸顯示。

要注意有的上位機需要在這裡進行設定,意義在於由於我們做智慧型車只需要採集攝像頭的部分畫素(隔行隔畫素採集),因此如果 1:1 顯示影象,影象可能很小,而根據介面尺寸放大畫素,就能清楚得看到影象了。(山外不存在的!)

3、影象大小

這個要尤其格外非常注意,根據 mcu 的程式採集的畫素解析度進行設定,只有設定得和程式的一致了,上位機才能採集並正確地顯示影象。

4、連續採集與採集一副圖

上位機接收 mcu 上傳的影象,根據協議,要先搜尋到影象頭 ff,才認為是一幀影象的開始,才開始顯示影象。

5、什麼是 rgb565

眾所周知,rgb 是組成彩色的三基色,要想顯示乙個畫素的顏色,每個畫素

都需要3 個 byte資料的r、g、b來表示,那一副320*240的彩色影象,就需要320*240*3=230400b=225kb的資料來儲存,這樣看來,儲存影象的空間開銷是極大的。而在乙個畫素 rgb 中,g 分量的比重是最大的,r 和 b 的比重相對小一些,因此人們又想出了用r:g:b=5:6:5的比例關係,來表示乙個畫素,這樣一來,乙個畫素僅僅需要2 個 byte就可以表示其彩色資訊(這個 2 個 byte 中,r 佔 5bit,g 佔 6bit,b 佔 5bit),320*240的彩色影象的儲存空間也由225kb 減小到 150kb

接著就不難想象它的儲存方式了,

攝像頭的資料是在每乙個pclk 的上公升沿去讀取的。若攝像頭預設輸出的格式為rgb565,那麼攝像頭在上電之後,每觸發 2 個 pclk,讀取 2 個位元組,才是乙個畫素。在這個畫素中,rgb 的分布如下圖所示:在第乙個位元組(first byte)中y[7..3]為 r[4..0],y[2..0]為 g[5..3];在第二個位元組(second byte)中y[7..5]為 g[2..0]y[4..0]為 b[4..0]

6、 yuv4:2:2

人的眼睛對低頻訊號比對高頻訊號具有更高的敏感度,事實上,人的眼睛對明視度的改變比對色彩的改變要敏感的多。

因此,人們將rgb 三色訊號改為 yuv來表示,其中y 為灰度,uv 為色差。如果是表示一副彩色影象,同樣的道理,yuv444 是無損的儲存方式,但是需要 3 個位元組,儲存空間開銷很大。由於y 分量比 uv 分量重要的多,因此人們用 yuv422 來表示。這樣一來影象被壓縮了很多,乙個位元組就可以表示其彩色的資訊。

7、常見的ov7670和7620的對比學習

ov7670

ov7670 是 rgb565 輸出

對於 ov7670,由於它只有一組並行的資料口 y[7:0],所有的畫素資料都從

這個資料口出,因此每次讀取一次資料口,可以讀乙個位元組(byte)。下圖給出

了 k 個畫素(2k 個位元組)輸出的格式。

ov7620 是 yuv422 輸出

對於 ov7620,它有 2 組並行的資料口 y[7..0]和 uv[7..0],其中對於資料口

y[7..0],輸出的是灰度值 y,對於 uv[7..0]輸出的色度訊號 uv。下圖給出了 k 個

畫素(k 個位元組)輸出的格式。

如果從這兩款選擇一款做飛卡的話,賽道是白底黑線,因此我們只關心影象的灰度值,並不是需要他們的彩色值。

由此看來,對於 ov7670,它只有一組資料口,預設輸出rgb 彩色影象,對我們來說並不是想要的;而對於 ov7620,它有兩組資料口,一組資料口輸出的正是灰度值 y,我們無需去管 uv 引腳輸出的訊號,只採集 y口的資料,就能完美地體現出賽道的資訊來。對於全白的賽道背景,採集回來的資料是 255,對於黑色的賽道,採集回來的資料是 0,這樣就能很好的區別開賽道與背景。

8、什麼是 p 制,什麼是 n制

當前在智慧型車競賽中,我們用到的攝像頭,基本只有 2 種制式 p(pal)制和

n(ntsc)制。pal 制式和 ntsc 制式有很多區別,其中最主要的兩個區別就是p 制標準的攝像頭,每秒輸出 25 幀影象;n 制標準的攝像頭,每秒輸出 30 幀影象。

常見的p制:ov6620、sonyccd、lg ccd ov5116等

常見的n制:ov7620、ov7640等

10、逐行掃瞄與隔行掃瞄

所謂逐行掃瞄,即攝像頭的畫素自左向右、自上而下,一行緊接一行掃瞄輸

隔行掃瞄,就是在每行掃瞄點數不變的前提下,將影象分成 2 場進行傳送,這兩場分別稱為奇場和偶場。奇數場傳送 1、3、l 5、…奇數行;偶數場傳送 2、4、6、…偶數行

逐行掃瞄:ov6620、ov7640 等

隔行掃瞄:ov7620 等

總結一下:ov7620yuv422灰度輸出,30幀/s,隔行掃瞄,60場/秒。

11、什麼是消隱訊號

隱區的出現,在電視機原理上,是因為電子束結束一行掃瞄,從一行尾換到另一行頭,期間的空閒期,這叫做行消隱訊號;同理,從一場尾換到另一場頭,期間也會有空閒期,這叫做場消隱訊號。

12、時序分析

場中斷訊號 vsyn、行中斷訊號 href、畫素中斷訊號 pclk

拿ov7620舉例,

vsyn 的週期是 16.64ms,高電平時間為換場時間,約 80us;低電平時間內,畫素輸出。我們在採集 vsyn 脈衝時,既可以採集上公升沿,也可以採集下降沿,採集下降沿更準確些,這也是一場的開始。從 vsyn 的週期可以算出,1s/16.64ms=60 ,ov7620 是隔行輸出,所以它的幀率是 30 幀/s,也是60場/s。

href 的週期 63.6us,高電平時間為畫素輸出時間,約 47us;低電平時間為換行時間,因此採集 href 一定要採集其上公升沿,下降沿后的資料是無效的。從href 的週期可以算出,16.64ms/63.6us≈261,除去期間的間隙時間,可以算出每場影象有 240 行。

pclk 的週期是 73ns,高電平輸出畫素,低電平畫素無效。pclk 是一直輸出的,因此一定要在觸發 vsyn 並且觸發 href 以後,再去捕捉 pclk 才能捕捉到畫素資料。從pclk 的週期可以算出,47us/73ns≈640,可以算出每行影象中有 640個畫素點。

Android開發之攝像頭

通過以下函式來獲得手機支援的picture和preview的大小 選擇合適的預覽尺寸 listsizelist parameters.getsupportedpreviewsizes 如果sizelist只有乙個我們也沒有必要做什麼了,因為就他乙個別無選擇 if sizelist.size 1 i9...

opencv之呼叫攝像頭

基礎知識 cap.set propid,value cap.isopened 返回 true false 檢查攝像頭初始化是否成功 cap.read 返回兩個值 再返回乙個值,為每一幀的影象,該值是乙個三維矩陣 通用接收方法為 ret,frame cap.read ret 布林值 frame 影象的...

ros之除錯orbbec攝像頭

orbbec攝像頭分幾種 有mini和mini s,其中mini是0.6m 8m,mini s是0.4m 2m。當前時間2018年1月18日 mini使用的是一代晶元,用rviz檢視的點雲資料噪點特別多,而mini s使用的是二代晶元,檢視的點雲資料非常清晰。用ros的啟動方式 roslaunch ...