国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

STM32驅動OV7725攝像頭顏色識別

2019-11-09 17:46:25
字體:
來源:轉載
供稿:網友

實驗目的: 使用stm32驅動OV7725攝像頭進行圖像實時采集,在tft屏幕上實時顯示并識別圖像中的特定顏色,在顏色的周圍畫上框。

實驗現象: 這里寫圖片描述

我的工程代碼鏈接: http://download.csdn.net/my

程序移植自阿莫論壇某位大神的程序。 鏈接:http://www.amobbs.com/thread-5499408-1-1.html?_dsign=85056954

實現原理: 將攝像頭的數據讀出寫入tft屏,讀取tft屏幕上的像素點的顏色進行識別。由于RGB格式的顏色數據的效果不好,所以將其轉換為HSL格式數據。首先遍歷尋找腐蝕中心,然后在之前腐蝕中心點處進行迭代向外尋找新的腐蝕中心。腐蝕算法從該點開始分別向上下左右四個方向進行讀點,若點的顏色符合條件則往外讀,等四個方向都結束后得到四個邊緣點的坐標,記左邊緣點的x軸坐標為left,右邊緣點的x軸坐標為right,上邊緣點的y軸坐標為up,下邊緣點的y軸坐標為bottom,那么坐標( (right-left)/2 , (up-bottom)/2 ) 即為新的腐蝕中心。

關于程序中使用到的參數值,我是參照下面這些該大神在論壇說的調試經驗得到的參數: 設置好H、S、L的閾值,用起來沒有問題。分享一下我的調節參數時總結的技巧: 1.識別綠色和藍色的效果最好,因為他們在色調譜中占據的范圍最大 2.先將S、L的范圍設的廣一些(如 5 -250 ),先調節H的值的范圍 3.H值調節好后,再調節S、L值

這里介紹下一些相關概念: HSL:(摘自百度百科) 這里寫圖片描述

這里寫圖片描述

HSL的H(hue)分量,代表的是人眼所能感知的顏色范圍,這些顏色分布在一個平面的色相環上,取值范圍是0°到360°的圓心角,每個角度可以代表一種顏色。基本參照:360°/0°紅、60°黃、120°綠、180°青、240°藍、300°洋紅,它們在色相環上按照60°圓心角的間隔排列。 HSL的S(saturation)分量,指的是色彩的飽和度,它用0%至100%的值描述了相同色相、明度下色彩純度的變化。數值越大,顏色中的灰色越少,顏色越鮮艷,呈現一種從理性(灰度)到感性(純色)的變化。 HSL的L(lightness)分量,指的是色彩的明度,作用是控制色彩的明暗變化。它同樣使用了0%至100%的取值范圍。數值越小,色彩越暗,越接近于黑色;數值越大,色彩越亮,越接近于白色。

HSL與RGB之間的計算: 從RGB推算HSL: R、G、B的數值定在【0,255】 亮度L只依賴于R、G、B的最大值和最小值。若令M、N分別是R、G、B的最大值和最小值,則有:若M=0(N=0),即R、G、B均為0時,L=0;否則,亮度L為 其中。由公式可知,L的取值范圍在0到240之間。 對于飽和度S:當M或N改變時S隨之改變;否則,S不變。即S與L的情況類似,只與最大和最小值有關,換句話說與L有關。所以可以得到S與L之間的數學關系: 當M=N=0或者M=N=255時,沒有意義;l=0時,s=0; 當(M+N)>256時,S為:S=240(M-N)/(512-M-N);當l>120時,s = (M-N)* 240 / ( 480 - ( M+ N) ); 當(M+N)<256時,S為:S=240(M-N)/(M+N);當l<=120時,s = (M-N)* 240 / ( M+ N); 同理,色相H也是只與最大值和最小值有關。 當M=N時,H無定義; 當最大值為紅色,最小值為藍色,即M=R、N=B,H介于0到40之間,有: H=40(G-N)/(M-N); 當最大值為紅色,最小值為綠色,即M=R、N=G,H介于200到240之間,有: H=240+40(G-B)/(M-N); 當最大值為綠色,最小值為紅色,即M=G、N=R,H介于80到120之間; 當最大值為綠色,最小值為藍色,即M=G、N=B,H介于40到80之間; h = 40 * ( B - R ) / (M-N)+ 80; 當最大值為藍色,最小值為紅色,即M=B、N=R,H介于120到160之間; 當最大值為藍色,最小值為綠色,即M=B、N=G,H介于160到200之間; h = 40 * ( R - G ) / (M-N)+ 160;

從HSL反算RGB: 當H無定義時,表示R、G、B三者相等,因策,他們的值可以直接由下面公式求得: 當L=0時,R=G=B=0; 當L!=0時,R=G=B=(17L-8)/16; 當H有定義時,令SUM為M與N之和,由上面的公式可知,若L=0,則SUM=0,否則SUM=(17L-8)*2/16。 若SUM<256,則最大值M為:M=SUM/2+SUM*S/480; 若SUM<=256,則最大值M為:M=SUM/2+(512-SUM)*S/480; 求出最大值后,可以求出最小值N=SUM-M。 下面分六種情況求出R、G、B的值: 令L為H/40的整數部分: 若L=0,則: R=M B=N G=B+H *(R-B)/40 若L=1,則: G=M B=N R=G+(G-B)(H-40)/40 若L=2,則: G=M R=N B=R+(G-R)(H-80)/40 若L=3,則: B=M R=N G=B+(B-R)(H-120)/40 若L=4,則: G=N B=M R=G+(B-G)(H-160)/40 若L=5,則: R=M G=N B=R +(R-G)(H-200)/40 至此RGB的反算就完成了。

如果想要更快捷地將HSL轉換成RGB格式,可以使用下面的工具: 網絡工具鏈接: HSL取色器 鏈接: http://hslpicker.com/#f9aee5,0.82 RGB、HEX、HSL等顏色形式相互轉換工具 鏈接: http://tools.jb51.net/color/rgb_hex_hsl

推薦使用windos自帶的繪圖工具軟件中,點“顏色”->”編輯顏色”->”規定自定義顏色” 進入調色板進行調色。 這里寫圖片描述

具體代碼請參考我上傳的工程代碼。

參考鏈接: 楊朝霞,逯峰,圖像處理中RGB與HLS之間的轉換,http://www.doc88.com/p-9991476681520.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普洱| 东海县| 平潭县| 南充市| 衡阳县| 任丘市| 新龙县| 宁海县| 甘德县| 静乐县| 平塘县| 建昌县| 灯塔市| 杭锦旗| 长汀县| 沭阳县| 丹凤县| 鹤壁市| 宾川县| 永吉县| 麻城市| 北海市| 平泉县| 安远县| 桓台县| 宝丰县| 河池市| 合作市| 理塘县| 天全县| 民权县| 讷河市| 区。| 象州县| 长春市| 潜江市| 麻江县| 麻江县| 花莲县| 玛纳斯县| 左云县|