資源簡介
C++代碼,基于陰影的車輛假設區域生成,主要實現步驟:1.加載一張路面圖片;2.加權平均灰度圖;3.路面ROI提取(用于作為二值化分割的閾值提取);4.對路面ROI進行canny邊緣提取;5.對路面ROI進行路面信息提取(根據canny圖,將非路面信息,車,路兩邊的干擾信息等剔除);6.對步驟5中得到的圖片信息進行直方圖處理;7.對得到的直方圖信息進行高斯擬合,得到直方圖的標準差,均值信息;8.根據標準差和均值信息得到二值化的閾值;9.二值化處理,得到分割后的圖像,得到所需要的車底陰影。
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include??
#include?
#include?
#include?
#include?
#include?
#include?
#include?“opencv2/imgproc/imgproc.hpp“
#include?“opencv2/highgui/highgui.hpp“
#include
#include?
#include?“time.h“
#include?
using?namespace?cv;
using?namespace?std;
using?namespace?Eigen;
Mat?getHistImage(const?MatND&?hist);
vector?gaussianfit(MatND?&?cal);
int?main()
{
Mat?frame?=?imread(“原圖.png“);
if
(frame.empty())
{
cout?<“圖像加載失敗!“< return?-1;
}
???? int?rows?=?frame.rows;
int?cols?=?frame.cols;
Mat?frame1?=?Mat(rows?cols?CV_8UC1);//灰度化圖
Mat?frame3;
//加權平均法灰度化
for?(int?i?=?0;?i? for?(int?j?=?0;?j? frame1.at(i?j)?=?saturate_cast(0.114*frame.at(i?j)[0]?+?0.587*frame.at(i?j)[1]?+?0.2989*frame.at(i?j)[2]);//加權平均 ?//frame1.data[i*step2?+?j]?=?(int)(0.11*frame.data[i*step?+?channels?*?j]?+?0.59*frame.data[i*step?+?channels?*?j?+?1]?+?0.3*frame.data[i*step?+?channels?*?j?+?2]);
?//frame1.at(i?j)?=?max_3(frame.at(i?j)[0]?frame.at(i?j)[1]?frame.at(i?j)[2]);//最大值法
}
}
frame3?=?frame1.clone();//灰度圖復制
Mat?roi?=?frame3(Rect(frame.cols?/?8?frame.rows?/?2?frame.cols?*?3?/?4?frame.rows?/?4));
Mat?roicp?=?roi.clone();
Canny(roi?roi?150?80?3);//邊緣檢測3X3?15080
for?(int?i?=?0;?i? for?(int?j?=?0;?j? if?(roi.at(Point(i?roi.rows?-?j?-?1))?==?255)?{
int?num?=?roi.rows?-?j;
for?(int?m?=?0;?m? roicp.at(Point(i?m))?=?255;
}
}
}
}
imshow(“roicp“?roicp);
int?channel[1]?=?{?0?};
int?histsize[1]?=?{?256?};//直方圖橫坐標的子區間數
float?hrange[2]?=?{?0?255?};//區間的總范圍
const?float?*ranges[1]?=?{?hrange?};//指針數組
Mat?out;//size?256*1?row?256?col?1
calcHist(&roicp?1?channel?Mat()?out?1?histsize?ranges);//直方圖
Mat?gau?=?out.clone();
Mat?last?=?getHistImage(out);
vector?B;//B[0]=s標準差?B[1]=xmax?B[2]=ymax
B?=?gaussianfit(gau);//高斯擬合
//根據標準差的范圍確定閾值計算規則
double?Sthresh;
cout?<“B[0]標準差“?<“:“?< cout?<“B[1]均值“?<“:“?< Sthresh?=?B[1]?-?3?*?B[0];
/*
if?(B[0]?<=?10)?{
Sthresh?=?B[1]?-?3?*?B[0];
}
else?if?(B[0]?<=?20?&&?B[0]?>?10)?{
Sthresh?=?B[1]?-?2?*?B[0];
}
else?if?(B[0]?<=?30?&&?B[0]?>?20)?{
Sthresh?=?B[1]?-?B[0];
}
else?{
Sthresh?=?B[1];
}
*/
cout?<“閾值“?<“:“?<
GaussianBlur(frame1?frame1?Size(3?3)?0?0?BORDER_DEFAULT);
threshold(frame1?frame1?Sthresh?255?1);//閾值底部分割
imshow(“原圖“?frame);
imshow(“二值化“?frame1);
waitKey(0);
retur
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-03-18?19:51??gaussianfit\
?????目錄???????????0??2019-03-18?18:55??gaussianfit\.vs\
?????目錄???????????0??2019-03-18?18:55??gaussianfit\.vs\gaussianfit\
?????目錄???????????0??2019-03-18?18:55??gaussianfit\.vs\gaussianfit\v14\
?????文件???????26112??2019-03-18?19:51??gaussianfit\.vs\gaussianfit\v14\.suo
?????目錄???????????0??2019-03-18?18:55??gaussianfit\Debug\
?????目錄???????????0??2019-03-18?19:31??gaussianfit\gaussianfit\
?????文件????62390272??2019-03-18?19:51??gaussianfit\gaussianfit.sdf
?????文件????????1315??2019-03-18?18:55??gaussianfit\gaussianfit.sln
?????目錄???????????0??2019-03-18?18:55??gaussianfit\gaussianfit\Debug\
?????目錄???????????0??2019-03-18?18:55??gaussianfit\gaussianfit\Debug\gaussianfit.tlog\
?????文件????????5824??2019-03-18?19:08??gaussianfit\gaussianfit\gaussianfit.vcxproj
?????文件?????????945??2019-03-18?19:08??gaussianfit\gaussianfit\gaussianfit.vcxproj.filters
?????文件????????5276??2019-03-18?19:31??gaussianfit\gaussianfit\main.cpp
?????目錄???????????0??2019-03-18?19:08??gaussianfit\gaussianfit\x64\
?????目錄???????????0??2019-03-18?19:31??gaussianfit\gaussianfit\x64\Release\
?????文件?????????539??2019-03-18?19:31??gaussianfit\gaussianfit\x64\Release\gaussianfit.log
?????目錄???????????0??2019-03-18?19:31??gaussianfit\gaussianfit\x64\Release\gaussianfit.tlog\
?????文件?????????626??2019-03-18?19:31??gaussianfit\gaussianfit\x64\Release\gaussianfit.tlog\CL.command.1.tlog
?????文件???????53582??2019-03-18?19:31??gaussianfit\gaussianfit\x64\Release\gaussianfit.tlog\CL.read.1.tlog
?????文件?????????294??2019-03-18?19:31??gaussianfit\gaussianfit\x64\Release\gaussianfit.tlog\CL.write.1.tlog
?????文件?????????188??2019-03-18?19:31??gaussianfit\gaussianfit\x64\Release\gaussianfit.tlog\gaussianfit.lastbuildstate
?????文件????????3146??2019-03-18?19:31??gaussianfit\gaussianfit\x64\Release\gaussianfit.tlog\li
?????文件???????10096??2019-03-18?19:31??gaussianfit\gaussianfit\x64\Release\gaussianfit.tlog\li
?????文件?????????488??2019-03-18?19:31??gaussianfit\gaussianfit\x64\Release\gaussianfit.tlog\li
?????文件?????5889084??2019-03-18?19:31??gaussianfit\gaussianfit\x64\Release\main.obj
?????文件?????6860800??2019-03-18?19:31??gaussianfit\gaussianfit\x64\Release\vc140.pdb
?????文件??????119924??2019-03-18?19:30??gaussianfit\gaussianfit\原圖.png
?????目錄???????????0??2019-03-18?19:08??gaussianfit\x64\
?????目錄???????????0??2019-03-18?19:08??gaussianfit\x64\Release\
?????文件??????101376??2019-03-18?19:31??gaussianfit\x64\Release\gaussianfit.exe
............此處省略3個文件信息
- 上一篇:C++必知必會高清版
- 下一篇:串口調試助手c++源碼
評論
共有 條評論