欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

c#如何實現(xiàn)車輛的輪廓識別

這篇文章主要為大家展示了“c#如何實現(xiàn)車輛的輪廓識別”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“c#如何實現(xiàn)車輛的輪廓識別”這篇文章吧。

十多年的寧江網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整寧江建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“寧江網(wǎng)站設(shè)計”,“寧江網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

場景

    實現(xiàn)了車輛的輪廓識別,并且已經(jīng)提取輪廓的最小矩形范圍,現(xiàn)在需要知道車尾離矩形最近的兩個點,可能有點大材小用

代碼

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include <vector>

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 );

}

/*

該函數(shù)主要是捕獲圖片中完整出現(xiàn)輪廓的車輛,判斷條件為

車輛的輪廓的Y坐標(biāo)不能大于圖片的長度,其次過濾掉面積過小

的輪廓,很可能是車鏡或者幀間差分將車輛拆分成兩段的誤差

*/

void CaptureCompleteVehicle(Mat &srcMat, Mat &grayMat)

{

  vector<vector<Point>> contours;  

  vector<Vec4i> 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<Moments> mu(contours.size());

  for (int i=0; i<contours.size(); i++)

  {

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

  }

  vector<Point2f> mc(contours.size());

  for (int i=0; i<contours.size(); i++)

  {

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

  }

  for(int i=0; i<contours.size(); i++)  

  {  

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

    bTouchBotton = false;

    bTouchTop    = false;

    for (int k=0; k<contours[i].size(); 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; //當(dāng)前幀

  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);  //自適應(yīng)閾值化

    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#如何實現(xiàn)車輛的輪廓識別”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)站標(biāo)題:c#如何實現(xiàn)車輛的輪廓識別
當(dāng)前URL:http://aaarwkj.com/article30/ggpipo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、搜索引擎優(yōu)化網(wǎng)站設(shè)計公司、網(wǎng)站建設(shè)手機網(wǎng)站建設(shè)、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
欧美午夜激情片在线观看| 麻豆一精品传二传媒短视频| 最新国产成人免费在线视频| 尤物资源视频在线观看| 中文字幕二区三区av| 国产乱码免费一区二区三区| avav男人天堂亚洲天堂| 国产精品久久一区二区三区蜜桃| 国产精品毛片在线看不卡| 久久夜色一区二区三区| 亚洲香蕉av一区二区蜜桃| 国产情侣自拍视频在线观看| 久久久偷拍美女撒尿尿| 麻豆精品国产粉嫩av| 亚洲精品成人午夜av| 国产一区在线视频无卡顿| 2020亚洲欧美日韩在线| 亚洲欧美日韩另类在线视频| 亚洲天堂av在线播放| 少妇高潮毛片免费看高潮| 中文字幕欧美人妻在线| 欧美三级黄片免费视频| 成人午夜激情在线观看| 青青草原成年人免费看| 91白丝视频在线观看| 国产亚洲精品免费专线视频| 亚洲精品视频在线观看视频| 久久亚洲精品1区2区| 国产又大又长又粗又硬又猛| 青青草免费在线播放视频网站| 亚洲精品乱码国产妇女毛片| 欧美一级特黄免费大片| 说中文字幕的黄色大网站| 成人福利午夜一区二区| 亚洲av永久精品桃色| 91在线直播观看高清| 国产欧美日韩精品av| 亚洲欧美另类不卡专区| 九九九热精品视频在线观看| 成年人在线免费观看国产| 人妻少妇久久久久久69|