资源简介

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 << “图像加载失败!“<< endl;
return -1;
}

     int rows = frame.rows;
int cols = frame.cols;

Mat frame1 = Mat(rows cols CV_8UC1);//灰度化图
Mat frame3;
//加权平均法灰度化
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; 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 < roi.cols; i++) {
for (int j = 0; j < roi.rows; j++) {
if (roi.at(Point(i roi.rows - j - 1)) == 255) {
int num = roi.rows - j;
for (int m = 0; m < num; 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]标准差“ << “:“ << B[0] << endl;
cout << “B[1]均值“ << “:“ << B[1] << endl;
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 << “阈值“ << “:“ << Sthresh << endl;

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\link.command.1.tlog
     文件       10096  2019-03-18 19:31  gaussianfit\gaussianfit\x64\Release\gaussianfit.tlog\link.read.1.tlog
     文件         488  2019-03-18 19:31  gaussianfit\gaussianfit\x64\Release\gaussianfit.tlog\link.write.1.tlog
     文件     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个文件信息

评论

共有 条评论