栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

OpenCv的车辆识别(C++版,超详细注释,可直接食用)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OpenCv的车辆识别(C++版,超详细注释,可直接食用)

效果图:

车辆识别

训练模型下载:         1、下载训练模型(.xml文件)

                CSDN:0积分下载

                GitHub:原资源

        2、将文件放在你个你自己找得到的地方,我放在项目文件夹下的

                如果没有放在项目文件夹下,注意改写下面的文件地址

    string car_cascade_name = "haarcascade_car.xml";    //训练的xml文件
代码:(可直接食用)

**使用前请注意训练文件和需要识别的视频文件位置是否正确**

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

int main()
{
    // 加载级联分类xml文件:
    string car_cascade_name = "haarcascade_car.xml";    //训练的xml文件
    CascadeClassifier car_cascade;
    car_cascade.load(car_cascade_name);     //加载xml文件

    // 加载视频:
    Mat frame;
    VideoCapture cap;
    string video_name = "car1.avi";//需要打开的视频名称
    if (!cap.open(video_name))  //判断视频地址是否有视频
    {
        cout << "Cannot open the video file " << video_name << endl;    //打印无视频信息
    }

    // 对视频进行处理
    Mat frame_resized; // 调整视频大小
    Mat gray; // 调整视频为灰色,方便处理
    while (cap.read(frame)) //判断视频是否播放完
    {
        int k = waitKey(30);
        if (k == 27)    //点击ESC退出播放
        {
            int c = waitKey(0);
            break;
        }else if (k == 13)  //点击Enter键,暂停
        {
            while (true)
            {
                int c = waitKey(0);
                if (c == 13)    //点击Enter键,继续
                {
                    break;
                }
            }
        }
        
        resize(frame, frame_resized, Size(0,0), 2, 2);//调整视频大小,放大2倍
        // imshow("Original size", frame);  //输出原视视频
        imshow("Resized", frame_resized);   //输出放大的视频
        cvtColor(frame_resized, gray, COLOR_BGR2GRAY);  //将每帧变为灰度图片
        // 使用 classifier 查找车辆:
        vector cars;
        car_cascade.detectMultiScale(gray, cars, 1.14, 2); //检测汽车数量
        if (cars.empty() == true)
        {
            cout << "No cars found" << endl;    //打印结果
            imshow("Cars", frame_resized);      //输出每帧
            continue;     //未检测到汽车,继续循环
        }
        else
        {
            cout << cars.size() << " car(s) found" << endl;   //打印结果
            // imshow("Cars", frame_resized);
        }

        //绘制识别到小车的红色矩形
        for (auto elem : cars)
        {
            Rect car_roi;   //矩形大小位置
            car_roi.x = elem.x;
            car_roi.y = elem.y;
            car_roi.width = elem.width;
            car_roi.height = elem.height;

            rectangle(frame_resized, Point(car_roi.x,car_roi.y),
                      Point(car_roi.x + car_roi.width,
                            car_roi.y + car_roi.height),
                      Scalar(127,0,255),2);//绘制矩形
            imshow("Cars", frame_resized); //显示最终结果
        }
    }

    return 0;
}
测试视频:

        

车辆识别视频

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853842.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号