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

效果图:

车辆识别

训练模型下载:

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

                CSDN:0积分下载

                GitHub:原资源

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

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

    string car_cascade_name = "haarcascade_car.xml";    //训练的xml文件

代码:(可直接食用)

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

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/objdetect.hpp>
#include <opencv2/features2d.hpp>
#include <math.h>

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<Rect> 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;
}

测试视频:

        

车辆识别视频

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值