国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

網(wǎng)站推廣需要域名遷移嘉興seo外包服務商

網(wǎng)站推廣需要域名遷移,嘉興seo外包服務商,南寧網(wǎng)站建設培訓學校,高端品牌發(fā)布會使用 C 和 OpenCV 構建智能停車場視覺管理系統(tǒng) 本文將詳細介紹如何利用 C 和 OpenCV 庫,從零開始創(chuàng)建一個智能停車場管理系統(tǒng)。該系統(tǒng)通過攝像頭捕捉的畫面,能自動完成兩項核心任務: 車位識別:通過檢測地面上的黃色停車線&#…

使用 C++ 和 OpenCV 構建智能停車場視覺管理系統(tǒng)

本文將詳細介紹如何利用 C++ 和 OpenCV 庫,從零開始創(chuàng)建一個智能停車場管理系統(tǒng)。該系統(tǒng)通過攝像頭捕捉的畫面,能自動完成兩項核心任務:

  1. 車位識別:通過檢測地面上的黃色停車線,自動識別并標定出所有停車位的位置。
  2. 狀態(tài)監(jiān)控:實時監(jiān)控每個車位,判斷其是**“空閑”還是“被占用”**,并進行可視化展示。

🧠 核心邏輯與方法

我們將整個系統(tǒng)分為兩個主要階段:校準階段監(jiān)控階段。

1. 校準階段 (Calibration Phase)

這個階段的目標是自動定義停車位。我們只需要對一張空停車場的圖片進行一次性處理。

  • 顏色分割: 將圖像從 BGR 轉(zhuǎn)換到 HSV 顏色空間。HSV 對光照變化不敏感,能更準確地提取出黃色。我們使用 cv::inRange 函數(shù)來創(chuàng)建一個只包含黃色標線的二值化“蒙版”。
  • 輪廓檢測: 在蒙版上,我們使用 cv::findContours 來尋找所有黃色區(qū)域的輪廓。
  • 車位標定: 通過對輪廓的面積形狀進行篩選,我們可以過濾掉噪聲,只保留代表停車位的矩形區(qū)域。我們使用 cv::minAreaRect 來獲取這些區(qū)域的精確位置(包括旋轉(zhuǎn)角度),并將這些位置信息保存到一個文件中(例如 parking_spots.xml)。

2. 監(jiān)控階段 (Monitoring Phase)

這個階段是系統(tǒng)的核心,它在實時的視頻流上運行。

  • 加載車位數(shù)據(jù): 程序首先從 parking_spots.xml 文件中加載所有預先標定好的停車位位置。
  • 占用檢測: 對每一個停車位區(qū)域(ROI),我們使用一種簡單而有效的方法來判斷是否有車:邊緣密度分析。
    • 一個空車位(通常是瀝青或水泥地面)的紋理較少,因此邊緣也較少。
    • 一輛汽車具有復雜的輪廓、窗戶、輪胎和車身線條,會產(chǎn)生大量的邊緣
  • 狀態(tài)判斷: 我們在每個車位 ROI 上運行 Canny 邊緣檢測,然后計算邊緣像素的數(shù)量。如果數(shù)量超過一個預設的閾值,我們就判定該車位**“被占用”,否則為“空閑”**。
  • 可視化: 根據(jù)判斷結(jié)果,在視頻畫面上用不同顏色的矩形(例如紅色代表占用,綠色代表空閑)框出每個車位,并顯示可用的車位總數(shù)。

🛠? 環(huán)境與準備

  • C++ 編譯器: G++, Clang, 或 MSVC。
  • OpenCV 庫: 確保已正確安裝并配置。
  • 校準圖像: 一張停車場空無一車時的圖像,例如 empty_lot.jpg
  • 測試視頻/圖像: 一段停車場有車輛進出的視頻或圖像,例如 parking_video.mp4。

💻 代碼實現(xiàn)

我們將代碼分為兩個獨立的文件:一個用于校準,一個用于監(jiān)控。

第1部分: 校準程序 (calibrate.cpp)

這個程序只運行一次,用于生成車位坐標文件。

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>int main(int argc, char** argv) {if (argc != 2) {std::cout << "Usage: ./calibrate_app <empty_lot_image>" << std::endl;return -1;}cv::Mat frame = cv::imread(argv[1]);if (frame.empty()) {std::cerr << "Error: Could not read the image." << std::endl;return -1;}// 1. 轉(zhuǎn)換為 HSVcv::Mat hsv;cv::cvtColor(frame, hsv, cv::COLOR_BGR2HSV);// 2. 顏色閾值分割 (針對黃色)// 注意: 這個范圍可能需要根據(jù)你的實際光照進行微調(diào)cv::Scalar lower_yellow(20, 100, 100);cv::Scalar upper_yellow(30, 255, 255);cv::Mat mask;cv::inRange(hsv, lower_yellow, upper_yellow, mask);// 3. 形態(tài)學操作去噪cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));cv::morphologyEx(mask, mask, cv::MORPH_CLOSE, kernel, cv::Point(-1,-1), 2);// 4. 尋找輪廓std::vector<std::vector<cv::Point>> contours;cv::findContours(mask, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);std::vector<cv::RotatedRect> parkingSpots;for (const auto& contour : contours) {// 5. 過濾輪廓并獲取最小外接旋轉(zhuǎn)矩形double area = cv::contourArea(contour);if (area > 2000) { // 根據(jù)車位實際像素大小調(diào)整此閾值cv::RotatedRect rotatedRect = cv::minAreaRect(contour);parkingSpots.push_back(rotatedRect);}}// 6. 保存車位坐標到文件cv::FileStorage fs("parking_spots.xml", cv::FileStorage::WRITE);fs << "parking_spots" << parkingSpots;fs.release();std::cout << "Successfully detected and saved " << parkingSpots.size() << " parking spots." << std::endl;// 可選: 可視化檢測到的車位for (const auto& spot : parkingSpots) {cv::Point2f vertices[4];spot.points(vertices);for (int i = 0; i < 4; i++) {cv::line(frame, vertices[i], vertices[(i + 1) % 4], cv::Scalar(0, 255, 0), 2);}}cv::imshow("Detected Parking Spots", frame);cv::waitKey(0);return 0;
}

第2部分: 監(jiān)控程序 (monitor.cpp)

這個程序加載校準數(shù)據(jù),并對視頻進行實時分析。

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>// 定義占用閾值
const int EDGE_PIXEL_THRESHOLD = 300; // 需要根據(jù)分辨率和場景微調(diào)int main(int argc, char** argv) {if (argc != 2) {std::cout << "Usage: ./monitor_app <video_file>" << std::endl;return -1;}// 1. 加載車位數(shù)據(jù)std::vector<cv::RotatedRect> parkingSpots;cv::FileStorage fs("parking_spots.xml", cv::FileStorage::READ);if (!fs.isOpened()) {std::cerr << "Error: Could not open parking_spots.xml. Run calibration first." << std::endl;return -1;}fs["parking_spots"] >> parkingSpots;fs.release();cv::VideoCapture cap(argv[1]);if (!cap.isOpened()) {std::cerr << "Error: Could not open video file." << std::endl;return -1;}cv::Mat frame, gray, roi, edges;while (cap.read(frame)) {int available_spots = 0;cv::cvtColor(frame, gray, cv::COLOR_BGR2GRAY);for (const auto& spot : parkingSpots) {// 2. 提取每個車位的 ROIcv::Rect br = spot.boundingRect();// 保證 ROI 在圖像邊界內(nèi)br &= cv::Rect(0, 0, frame.cols, frame.rows);if (br.width == 0 || br.height == 0) continue;roi = gray(br);// 3. 計算 ROI 內(nèi)的邊緣密度cv::Canny(roi, edges, 100, 200);int edge_pixels = cv::countNonZero(edges);// 4. 判斷車位狀態(tài)并可視化cv::Point2f vertices[4];spot.points(vertices);bool occupied = edge_pixels > EDGE_PIXEL_THRESHOLD;cv::Scalar color = occupied ? cv::Scalar(0, 0, 255) : cv::Scalar(0, 255, 0);for (int i = 0; i < 4; i++) {cv::line(frame, vertices[i], vertices[(i + 1) % 4], color, 2);}if (!occupied) {available_spots++;}}// 5. 顯示狀態(tài)信息std::string status_text = "Available: " + std::to_string(available_spots) + "/" + std::to_string(parkingSpots.size());cv::putText(frame, status_text, cv::Point(20, 40), cv::FONT_HERSHEY_SIMPLEX, 1.5, cv::Scalar(255, 255, 0), 3);cv::imshow("Parking Lot Monitor", frame);if (cv::waitKey(30) >= 0) break;}return 0;
}

🚀 編譯與運行

  1. 編譯: 打開終端,使用 g++pkg-config 編譯兩個程序。

    # 編譯校準程序
    g++ -o calibrate_app calibrate.cpp $(pkg-config --cflags --libs opencv4)# 編譯監(jiān)控程序
    g++ -o monitor_app monitor.cpp $(pkg-config --cflags --libs opencv4)
    

    注意: 如果你的 OpenCV 版本不是 4,請將 opencv4 替換為你的版本。

  2. 運行:

    • 第一步:運行校準程序,傳入空停車場的圖片。
      ./calibrate_app empty_lot.jpg
      
      這會生成一個 parking_spots.xml 文件。
    • 第二步:運行監(jiān)控程序,傳入要分析的視頻。
      ./monitor_app parking_video.mp4
      
      程序會加載 parking_spots.xml 并開始實時分析和顯示結(jié)果。

總結(jié)與改進

這個項目展示了如何用標準 OpenCV 功能構建一個實用的計算機視覺應用。它的優(yōu)點是邏輯清晰、實現(xiàn)簡單。當然,它也有可以改進的地方:

  • 魯棒性: 在光照劇烈變化或有陰影的情況下,基于邊緣的檢測可能會不穩(wěn)定??梢砸敫呒壍奶卣?#xff08;如 HOG)和機器學習分類器(如 SVM)來提高準確性。
  • 靈活性: 對于非黃色標線或不規(guī)則車位,需要修改顏色分割和輪廓篩選邏輯。
  • 用戶界面: 可以創(chuàng)建一個簡單的 GUI,讓用戶通過鼠標點擊來手動調(diào)整或標定車位,而不是完全依賴自動檢測。
http://m.aloenet.com.cn/news/1493.html

相關文章:

  • 土巴兔裝修貴嗎seo的最終是為了達到
  • 網(wǎng)站建設的基礎知識與維護百度關鍵詞廣告怎么收費
  • 設置自己的網(wǎng)站三亞百度推廣公司電話
  • 翠竹營銷網(wǎng)站設計知名的seo快速排名多少錢
  • 西安網(wǎng)站策劃設計中國移動有免費的視頻app
  • 網(wǎng)站規(guī)劃怎么寫英文seo兼職
  • php企業(yè)網(wǎng)站開發(fā)框架電商產(chǎn)品推廣方案
  • 環(huán)球影城漫游卡持卡人是什么意思重慶seo優(yōu)化公司
  • 鄭州 做網(wǎng)站優(yōu)化大師官網(wǎng)下載安裝
  • 國內(nèi)機加工訂單百度seo公司一路火
  • 東莞建設質(zhì)監(jiān)網(wǎng)站網(wǎng)站制作需要多少錢
  • wordpress做社交網(wǎng)站嗎放心網(wǎng)站推廣優(yōu)化咨詢
  • 嬰兒衣服做的網(wǎng)站域名注冊管理機構
  • 怎么給領導做網(wǎng)站分析網(wǎng)站鏈接查詢
  • 網(wǎng)站開發(fā)的實訓報告前端開發(fā)
  • 怎樣做水族館網(wǎng)站關鍵詞在線試聽免費
  • 做外貿(mào)賣小商品是哪個網(wǎng)站在線識圖
  • 哪些可以免費做網(wǎng)站推廣優(yōu)化關鍵詞
  • 合肥網(wǎng)站建設設計海外免費網(wǎng)站推廣
  • 特產(chǎn)網(wǎng)站開發(fā)的好處怎么在百度發(fā)布信息
  • 松原做網(wǎng)站公司刷排名的軟件是什么
  • 網(wǎng)站流量如何提高網(wǎng)站友情鏈接購買
  • 比較還做的調(diào)查網(wǎng)站google搜索首頁
  • 莆田 網(wǎng)站建設今日最新新聞重大事件
  • 成都食品網(wǎng)站開發(fā)哈爾濱網(wǎng)站推廣
  • 怎么給購物網(wǎng)站做推廣網(wǎng)站維護費用
  • 北京哪家公司做網(wǎng)站好seo發(fā)貼軟件
  • 做新聞類網(wǎng)站google搜索關鍵詞熱度
  • 網(wǎng)站用戶注冊怎么建新手做電商怎么起步
  • 網(wǎng)站網(wǎng)站設計公司互聯(lián)網(wǎng)平臺