日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

3 OpenCV 车牌识别-2 颜色定位

發(fā)布時(shí)間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3 OpenCV 车牌识别-2 颜色定位 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

HSV顏色模型

如果我們想找出一副圖像中的藍(lán)色部分,我們需要檢查rgb分量中的blue分量就可以了。一般blue分量是0-255的值,即便藍(lán)色分量255了,由于另外兩個(gè)分量的影響,需要考慮各個(gè)分量的配比問(wèn)題,rgb作為顏色判斷很難實(shí)現(xiàn),就有了hsv模型hsv,photoshop中hsb

HSV(Hue, Saturation, Value)是根據(jù)顏色的直觀特性由A. R. Smith在1978年創(chuàng)建的一種顏色空間, 也稱(chēng)六角錐體模型(Hexcone Model)。這個(gè)模型中顏色的參數(shù)分別是:色調(diào)(H),飽和度(S),明度(V)。

色調(diào)H

用角度度量,取值范圍為0°~360°,從紅色開(kāi)始按逆時(shí)針?lè)较蛴?jì)算,紅色為0°,綠色為120°,藍(lán)色為240°。它們的補(bǔ)色是:黃色為60°,青色為180°,品紅為300°;

飽和度S

飽和度S表示顏色接近光譜色的程度。一種顏色,可以看成是某種光譜色與白色混合的結(jié)果。其中光譜色所占的比例愈大,顏色接近光譜色的程度就愈高,顏色的飽和度也就愈高。飽和度高,顏色則深而艷。光譜色的白光成分為0,飽和度達(dá)到最高。通常取值范圍為0%~100%,值越大,顏色越飽和。

亮度V

亮度表示顏色明亮的程度,對(duì)于光源色,明度值與發(fā)光體的光亮度有關(guān);對(duì)于物體色,此值和物體的透射比或反射比有關(guān)。通常取值范圍為0%(黑)到100%(白)。

在OpenCV中hsv 數(shù)據(jù)為8UC則取值分別為 0-180 0-255 0-255 ,即藍(lán)色240對(duì)應(yīng)的應(yīng)該是120

1, 預(yù)處理
//src目前是BGR顏色空間,轉(zhuǎn)換成HSV

Mat hsv;cvtColor(src, hsv, COLOR_BGR2HSV);//imshow("hsv", hsv);

效果

2找藍(lán)色像素:h(100-124),s(43-255),v(46-255)
遍歷
獲取通道數(shù)

int channels = hsv.channels();int height = hsv.rows;//如下圖,寬度變成了列數(shù)乘以3int width = hsv.cols * channels;//如果是連續(xù)存儲(chǔ),按照1行來(lái)處理,如下圖,內(nèi)存地址從0到8為第一行,將下一行看作為一行。if (hsv.isContinuous()) {width *= height;height = 1;}uchar* p;for (int i = 0; i < height; i++){//取第i行的數(shù)據(jù)p = hsv.ptr<uchar>(i);//每次處理channels個(gè)數(shù)據(jù),這里j步長(zhǎng)為channels,每次都取3個(gè)。for (int j = 0; j < width; j += channels) {//獲取 h s v 分量int h = p[j];int s = p[j + 1];int v = p[j + 2];//h(100-124),s(43-255),v(46-255)bool isBlue = false;if (h >= 100 && h <= 124 &&s >= 43 && s <= 255 &&v >= 46 && v <= 255) {isBlue = true;}if (isBlue){//凸顯藍(lán)色(v分量最大255)p[j] = 0;//hp[j + 1] = 0;//sp[j + 2] = 255;//v}else {//變黑(v分量為0)p[j] = 0;//hp[j + 1] = 0;//sp[j + 2] = 0;//v}}}// end for//imshow("凸顯藍(lán)色", hsv);


處理完之后如圖:
如果是藍(lán)色的車(chē),可能就識(shí)別不了了。

vector<Mat> hsv_split;split(hsv, hsv_split);//對(duì)圖像按通道進(jìn)行分離 , merge()合并//imshow("分離v分量", hsv_split[2]);//v分離

https://blog.csdn.net/u012819339/article/details/82222008

分離 之后如圖:

分離分量之后,和sobel一樣,進(jìn)行二值化,閉操作,找輪廓。。。

注意:
之前的是藍(lán)色的,還有一種是黃色的。
//藍(lán)色車(chē)牌:字符淺背景深,正二值化
//黃色車(chē)牌:字符深背景淺,反二值化

//二值化Mat shold;//THRESH_OTSU 大律法 自適應(yīng)閾值//THRESH_BINARY 正二值化//THRESH_BINARY_INV 反二值化//藍(lán)色車(chē)牌:字符淺背景深,正二值化//黃色車(chē)牌:字符深背景淺,反二值化threshold(hsv_split[2], shold, 0, 255, THRESH_OTSU + THRESH_BINARY);//imshow("color二值化", shold);//閉操作Mat close;Mat element = getStructuringElement(MORPH_RECT, Size(17, 3));morphologyEx(shold, close, MORPH_CLOSE, element);//imshow("color閉操作", close);//找輪廓vector<vector<Point>> contours;findContours(close, //輸入圖像contours, //輸出輪廓RETR_EXTERNAL, //外輪廓CHAIN_APPROX_NONE //輪廓上所有像素點(diǎn));RotatedRect rotatedRect;vector<RotatedRect> vec_color_rects;//遍歷并判斷矩形尺寸Mat src_clone = src.clone();for each (vector<Point> points in contours){rotatedRect = minAreaRect(points);//帶角度的矩形rectangle(src_clone, rotatedRect.boundingRect(), Scalar(0, 0, 255));if (verifySizes(rotatedRect)) {vec_color_rects.push_back(rotatedRect);}}for each (RotatedRect rect in vec_color_rects){rectangle(src_clone, rect.boundingRect(), Scalar(0, 255, 0));}//imshow("color找輪廓", src_clone);//矩形矯正(角度判斷,旋轉(zhuǎn)矩形,調(diào)整大小)tortuosity(src, vec_color_rects, dst_plates);/*for each (Mat m in dst_plates){//imshow("color定位候選車(chē)牌", m);//waitKey();}*/

color二值化:
sobel二值化

sobel閉操作(左)和color閉操作(右邊)圖對(duì)比
顯然,color閉操作要好一點(diǎn)。

總結(jié)

以上是生活随笔為你收集整理的3 OpenCV 车牌识别-2 颜色定位的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。