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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对一张静态图片的识别

發(fā)布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对一张静态图片的识别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先請出我們的主角


我們今天要識別的就是這張圖片,然后首先我們來看看最后的識別效果

雖然識別出來之后畫的標記不是很好,但是只要位置信息出來了,畫標記其實是次要的了。

預備知識

這里先介紹一下用到的OpenCV中的名詞(有函數(shù)有類)

Mat:類名,用于儲存圖像

namedWindow:使imshow函數(shù)展示的圖片窗口大小可調(diào)

imshow:展示圖片,并自定義圖片窗口名

RotatedRect:旋轉(zhuǎn)矩形,類名

Point2f:一個點,點的兩個坐標為float型變量

points:返回旋轉(zhuǎn)矩形的四個頂點

line:連線函數(shù),參數(shù)的意義為:繪制的圖片,點1,點2,線的顏色,線的寬度

cvtColor:將圖片轉(zhuǎn)化為灰度圖,三個參數(shù)的含義為:輸入圖片,輸出圖片,轉(zhuǎn)換的細節(jié)(我也剛學,建議csdn)

threshold:將圖片轉(zhuǎn)化為灰度圖:五個參數(shù)的含義為:輸入圖片,輸出圖片,亮度下界,亮度上界(上下界之中的像素會被置為白色,其余為黑色),轉(zhuǎn)化細節(jié)(不了解,同上^ 3^)

split:人如其名,將一張圖片的RGB分裂開來,以BGR的順序存在Mat數(shù)組中(便于后面的尋找顏色位置)

subtract:做減法,不過對象為兩張圖片,三個參數(shù)為:被減數(shù),減數(shù),差
不過這里需要注意的是,RoboMaster里面只有兩種裝甲板,紅色和藍色,紅色我們就紅減藍,藍色我們就藍減紅

getStructuringElement:的意義是創(chuàng)建一個用于膨脹操作的圖形,兩個參數(shù)的含義是:圖形類型(有矩形,橢圓啥的),大小

dilate:膨脹操作,三個參數(shù)的含義為:輸入圖像,輸出圖像,膨脹用的圖形

Point:表示一個點

findContours:根據(jù)二值圖片,尋找二值位置的輪廓,四個參數(shù)的含義為:輸入圖片,儲存輪廓容器,后面兩個是找輪廓的選項(我也不是很了解)

auto:這個不用多說哈

minAreaRect:找到能夠裝下這個輪廓的最小矩形

waitKey:設置展示圖片多久自動關(guān)閉窗口,單位為毫秒,若為0,則為手動關(guān)閉

然后我們一步步介紹識別步驟

(所有實現(xiàn)基于VS2017+OpenCV4.1.1)

首先我們需要讀入圖片,用庫函數(shù)imread讀入,我們的圖片文件需要與main文件在同一位置,不然我這樣讀取會報錯

然后對其進行預處理(傳入pretreat函數(shù)中),預處理的目的是得到一張經(jīng)過膨脹操作后的二值圖,再用后續(xù)的操作得到輪廓并畫出

現(xiàn)在我們先介紹pretreat函數(shù):

首先我們將傳入的圖片轉(zhuǎn)換為一個灰度圖
cvtColor(raw, grey, COLOR_BGR2GRAY);

然后轉(zhuǎn)化為二值圖
threshold(grey, bigrey, 150, 255, THRESH_BINARY);

再將原圖RGB分離
split(raw, channel);

將B通道減去R通道
subtract(channel[0], channel[2], sub_br);

將相減之后的圖片二值化
threshold(sub_br, sub_br, 110, 255, THRESH_BINARY);

創(chuàng)建一個用于膨脹的圖形
Mat element1 = getStructuringElement(MORPH_RECT, Size(3, 3));

進行膨脹操作
dilate(sub_br, sub_br, element1);

ret = sub_br & bigrey;這一句,我們用原圖 灰度二值 之后的圖片與(&)上原圖 通道相減二值膨脹 之后的圖片,提取出較為可信的候選區(qū)域后,再進行膨脹

創(chuàng)建另一個用于膨脹的圖片
Mat element2 = getStructuringElement(MORPH_RECT, Size(2, 2));

對我們與操作之后的結(jié)果進行膨脹操作
dilate(ret, ret, element2);

然后將ret作為結(jié)果傳出

可能會很疑惑,這些參數(shù)都是怎么來的
沒錯都是一個個試出來的,換了圖片就不一定管用了



然后介紹一下fixarmor函數(shù)(后續(xù)的展示基于原圖)

其實這張圖經(jīng)過預處理之后還會剩余很多的不需要的白色色塊,這個時候就需要我們用匹配進行取舍,只有能夠配對的我們才將其保留下來
還有就是,這里的匹配操作的時間復雜度是 O(n2),我說實話我不知道有沒有更好的匹配方法

contour:我們儲存輪廓的容器,但是我不知道為什么需要這么創(chuàng)建(指模板參數(shù))考ccf差點坑死我(指創(chuàng)建方式)

rect:存我們匹配后的所有矩形

ret:最后配對成功時,會以pair的形式存在ret中

findContours(img, contour, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);找輪廓

然后將輪廓弄成矩形后,存在rect中

(這里用找到的temp畫的圖)

然后雙重for,匹配燈條(匹配完之后就是我們最后的結(jié)果,所以不展示了)
我這里用了角度,面積,長寬比進行篩選
(除了長寬比需要用取出的長除取出的寬之外,其余兩個都是成員變量)

后面就是匹配,沒錯參數(shù)也是我一個個試出來的

最后是源碼:(這個沒有分文件編寫

#include<opencv2/opencv.hpp> #include<iostream> #include<vector> #include<cmath> using namespace std; using namespace cv;void show(Mat img, string name) {namedWindow(name, 0);imshow(name, img);return; }void drawrect(Mat &img, RotatedRect ob) {Point2f v[4];ob.points(v);for (int i = 0; i < 4; i++)line(img, v[i], v[(i + 1) % 4], Scalar(0, 255, 0), 1);return; }void drawtarget(Mat &img, RotatedRect ob1, RotatedRect ob2) {Point2f v1[4], v2[4];ob1.points(v1);ob2.points(v2);line(img, v1[0], v1[1], Scalar(0, 255, 0), 1);line(img, v1[0], v2[3], Scalar(0, 255, 0), 1);line(img, v2[2], v1[1], Scalar(0, 255, 0), 1);line(img, v2[2], v2[3], Scalar(0, 255, 0), 1);return; }Mat pretreat(Mat raw) {Mat grey;cvtColor(raw, grey, COLOR_BGR2GRAY);Mat bigrey;threshold(grey, bigrey, 150, 255, THRESH_BINARY);Mat channel[3];split(raw, channel);Mat sub_br;subtract(channel[0], channel[2], sub_br);threshold(sub_br, sub_br, 110, 255, THRESH_BINARY);Mat element1 = getStructuringElement(MORPH_RECT, Size(3, 3));dilate(sub_br, sub_br, element1);Mat ret;ret = sub_br & bigrey;Mat element2 = getStructuringElement(MORPH_RECT, Size(2, 2));dilate(ret, ret, element2);return ret; }void fixarmor(Mat &raw,Mat img) {vector<vector<Point>> contour;vector<RotatedRect> rect,finall;vector<pair<RotatedRect, RotatedRect>> ret;findContours(img, contour, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);for (auto x : contour){RotatedRect temp = minAreaRect(x);rect.push_back(temp);}for (auto x : rect){for (auto y : rect){double xangle, yangle, xarea, yarea, xrate, yrate;xarea = x.size.area();xangle = x.angle;yarea = y.size.area();yangle = y.angle;xrate = x.size.height / x.size.width;yrate = y.size.height / y.size.width;if (xarea == yarea) continue;if (xangle > 10 || yangle > 10) continue;if (xarea < 15 || yarea < 15) continue;if (fabs(xarea - yarea) < 20 && fabs(xangle - yangle) < 2&& fabs(xrate - yrate) < 0.1&&fabs(x.size.height - y.size.height) < 5&& fabs(x.size.width - y.size.width) < 5)ret.push_back({ x,y });}}//cout << ret.size() << endl;for (auto x : ret) { drawrect(raw, x.first); drawrect(raw, x.second);}for (auto x : ret) drawtarget(raw, x.first, x.second);return; }int main() {Mat hero = imread("hero.jpg");Mat temp = pretreat(hero);fixarmor(hero,temp);show(hero, "hero");waitKey(0);//system("pause");return 0; }

然后按道理是可以將藍減紅改成紅減藍來識別紅色燈條的我沒試過,如果識別不了,可以評論私信找我擊劍

截中間圖好麻煩
不要問我為什么用綠色畫圖,我做題看不到綠色,所以我要多看看綠色

總結(jié)

以上是生活随笔為你收集整理的对一张静态图片的识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: www.youjizz国产 | 成年女人毛片 | 我要看免费毛片 | 三年中国片在线高清观看 | 色综合久久天天综合网 | 99re在线视频免费观看 | 国产又色又爽又高潮免费 | 精品国产乱码久久久久久蜜柚 | 青草视频免费观看 | 日韩 国产 欧美 | 中日一级片 | 日本欧美一级片 | 久久久观看 | 性农村xxxxx小树林 | 日韩a∨| 一级黄色特级片 | 亚洲精品www. | 久久国产精品毛片 | 精品一区二区三区四区视频 | 日韩五码电影 | 999久久久国产精品 韩国精品一区二区 | a级黄色录像 | 国产伦精品一区二区免费 | hd丰满圆润的女人hd | 欧美日韩生活片 | 亚洲成人精品一区二区 | 日韩精品h| 精品国产一区二区三区久久久蜜月 | 91精品久久香蕉国产线看观看 | 日韩中文在线播放 | 国产高清片 | 瑟瑟视频在线免费观看 | 99成人 | 免费观看一级黄色片 | 无套内谢88av免费看 | 国产crm系统91在线 | 亚洲国产精品一区二区尤物区 | 日本高清视频在线观看 | 91久久超碰 | 成人精品在线观看视频 | 国产免费一区二区视频 | 天堂伊人 | 国产偷啪 | 国产又黄又大又粗视频 | 日日草草| 丰满秘书被猛烈进入高清播放在 | 亚洲区偷拍| 日本孰妇毛茸茸xxxx | 综合久久五月天 | 欧美一页| 特级黄色网| 黄色午夜| av片在线观看免费 | 美女光屁股视频 | 日韩一区二区免费在线观看 | 国产超碰av| 热99视频| 亚洲天堂性 | av高清在线| 久久99国产精品 | 欧美伦理片 | 国产日韩久久 | 91porny丨首页入口在线 | 国产精品毛片久久久久久 | 国产一区二区三区日韩 | 人妻少妇偷人精品久久久任期 | 亚洲综合成人亚洲 | 九色一区 | 中文字幕人妻一区二区三区在线视频 | 天天艹夜夜艹 | 久久久噜噜噜www成人网 | 九九99精品视频 | 精品久久久久久久久久久国产字幕 | 国产精品第157页 | 日韩在线播放中文字幕 | 国产男女猛烈无遮挡 | 欧美亚洲天堂 | 靠逼动漫| 色呦呦网站在线观看 | 国产午夜成人久久无码一区二区 | 国产欧美久久一区二区三区 | 成人深夜福利 | 中文字幕人妻一区二区三区 | 国产又黄又爽视频 | 日本在线视频中文字幕 | 久久九九精品视频 | 宝贝乖h调教灌尿穿环 | 在线观看色 | 中文在线免费观看 | 国产精品视频全国免费观看 | 少妇又色又紧又黄又刺激免费 | 欧美日韩观看 | 你懂的网址在线 | 青青草视频在线观看 | 日韩欧美中文字幕在线播放 | 中日韩在线观看视频 | 可以免费看av | 欧美第一页浮力影院 | 特黄色一级片 |