千家信息网

c#如何实现车辆的轮廓识别

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要为大家展示了"c#如何实现车辆的轮廓识别",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"c#如何实现车辆的轮廓识别"这篇文章吧。场景实现了车辆的
千家信息网最后更新 2026年11月04日c#如何实现车辆的轮廓识别

这篇文章主要为大家展示了"c#如何实现车辆的轮廓识别",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"c#如何实现车辆的轮廓识别"这篇文章吧。

场景

实现了车辆的轮廓识别,并且已经提取轮廓的最小矩形范围,现在需要知道车尾离矩形最近的两个点,可能有点大材小用

代码

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include

using namespace cv;

using namespace std;

void Dilate( InputArray src, OutputArray dst)

{

int dilation_type = MORPH_RECT;

int dilation_size = 10;

Mat dielem = getStructuringElement( dilation_type,

Size( 2*dilation_size + 1, 2*dilation_size+1 ),

Point( dilation_size, dilation_size ) );

///膨胀操作

dilate( src, dst, dielem );

}

/*

该函数主要是捕获图片中完整出现轮廓的车辆,判断条件为

车辆的轮廓的Y坐标不能大于图片的长度,其次过滤掉面积过小

的轮廓,很可能是车镜或者帧间差分将车辆拆分成两段的误差

*/

void CaptureCompleteVehicle(Mat &srcMat, Mat &grayMat)

{

vector> contours;

vector hierarchy;

findContours(grayMat, contours,hierarchy,RETR_EXTERNAL,CHAIN_APPROX_NONE,Point());

Mat dstMat=Mat::zeros(grayMat.size(),CV_8UC1);

Mat contourMat;

srcMat.copyTo(contourMat);

int picHeight = grayMat.size().height;

bool bTouchBotton = false;

bool bTouchTop = false;

vector mu(contours.size());

for (int i=0; i

{

mu[i] = moments(contours[i], false);

}

vector mc(contours.size());

for (int i=0; i

{

mc[i] = Point2d(mu[i].m10 / mu[i].m00, mu[i].m01 / mu[i].m00);

}

for(int i=0; i

{

if (contourArea(contours[i]) < 10000) continue;

bTouchBotton = false;

bTouchTop = false;

for (int k=0; k

{

Point2f pos = contours[i][k];

if ((pos.y +10) > picHeight)

{

bTouchBotton = true;

break;

}

if (pos.y == 0)

{

bTouchTop = true;

break;

}

}

if (bTouchBotton || bTouchTop) continue;

drawContours(dstMat, contours, i, Scalar(255, 0, 0), 1, 8, hierarchy);

RotatedRect rect=minAreaRect(contours[i]);

Point2f P[4];

rect.points(P);

int leftBottonIndex = 0;

for(int j=0; j<=3; j++)

{

line(contourMat, P[j], P[(j+1)%4], Scalar(255, 0, 0), 2);

if ((P[j].x < mc[i].x) && (P[j].y > mc[i].y))

{

leftBottonIndex = j;

}

}

cv::Rect re(P[leftBottonIndex].x - 20, P[leftBottonIndex].y - 20 , 40, 40);

rectangle(contourMat, re, Scalar(0, 255, 0), 4);

circle(contourMat, mc[i], 5, Scalar(0, 0, 255), -1, 8, 0);

}

imshow("NewAreaRect", contourMat);

}

int main(int argc,char *argv[])

{

VideoCapture videoCap("E:/smoky-cars/positive/大庆东路与水机路交叉口(东北)_冀BU0157_02_141502_01_3_50.wh364");

if(!videoCap.isOpened()) return -1;

double videoFPS=videoCap.get(CV_CAP_PROP_FPS); //获取帧率

double videoPause=1000/videoFPS;

Mat framePrePre; //上上一帧

Mat framePre; //上一帧

Mat frameNow; //当前帧

Mat frameDet; //运动物体

videoCap>>framePrePre;

videoCap>>framePre;

cvtColor(framePrePre,framePrePre,CV_RGB2GRAY);

cvtColor(framePre,framePre,CV_RGB2GRAY);

int save=0;

while(true)

{

videoCap>>frameNow;

if(frameNow.empty()||waitKey(videoPause)==27) break;

cvtColor(frameNow,frameNow,CV_RGB2GRAY);

Mat Det1;

Mat Det2;

absdiff(framePrePre,framePre,Det1); //帧差1

absdiff(framePre,frameNow,Det2); //帧差2

threshold(Det1,Det1,0,255,CV_THRESH_OTSU); //自适应阈值化

threshold(Det2,Det2,0,255,CV_THRESH_OTSU);

Mat element=getStructuringElement(0,Size(3,3)); //膨胀核

dilate(Det1,Det1,element); //膨胀

dilate(Det2,Det2,element);

bitwise_and(Det1,Det2,frameDet);

framePrePre=framePre;

framePre=frameNow;

Dilate(frameDet, frameDet);

CaptureCompleteVehicle(frameNow, frameDet);

waitKey(1000);

}

return 0;

}

以上是"c#如何实现车辆的轮廓识别"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

轮廓 车辆 c# 内容 篇文章 图片 矩形 上一 学习 帮助 最小 大材小用 两个 交叉口 代码 函数 场景 坐标 易懂 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 伟宏互联网科技 广州万易互联网科技有限公司 A股互联网金融科技公司 互联网科技金融公司 互联网科技小贷 北京禾田雨橡互联网科技 江苏南京365互联网科技 注册互联网科技公司经营范围大全 恒生互联网科技指数跳水 华夏恒生互联网科技013171 西安小鹰速贷互联网科技有限公司 科技赋能视角下互联网保险发展 长沙互联网科技 深圳无忧互联网科技 吉林省码上互联网科技电话 互联网科技企业商标注意事项 湖北辰鑫科技互联网 平安好医生打造互联网科技医疗 互联网高科技绘画 什么是科技互联网 圆梦互联网科技 互联网科技集团 科技与互联网哪个更好 烟台灵鸽互联网科技有限公司 富国互联网科技002692 上海乐五互联网科技有限公司 第三届互联网大会安防黑科技 杭州融税互联网科技有限公司 安徽九吞吴互联网科技有限公司
0