资源简介
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\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++源码
评论
共有 条评论