Opencv級聯分類器詳解

一、Opencv級聯分類器源碼

Opencv級聯分類器是指一種基於Haar特徵的分類器,在計算機視覺領域中有著廣泛應用。Opencv級聯分類器的源碼可以在官方網站上進行下載,由於其開源特點,所有人都可以使用、修改、發布、複製。


//使用Opencv級聯分類器進行人臉檢測
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{
    //載入分類器
    CascadeClassifier face_cascade;
    face_cascade.load("./haarcascade_frontalface_alt2.xml");

    //讀取圖片
    Mat img = imread("test.jpg", IMREAD_COLOR);
    if (img.empty())
    {
        cout << "圖片讀取失敗!" << endl;
        return -1;
    }

    //檢測人臉
    vector<Rect> faces;
    face_cascade.detectMultiScale(img, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));

    //標出人臉位置
    for (size_t i = 0; i < faces.size(); i++)
    {
        rectangle(img, faces[i], Scalar(0, 0, 255), 2);
    }

    //顯示結果
    namedWindow("result", WINDOW_NORMAL);
    imshow("result", img);
    waitKey(0);
    return 0;
}

上述代碼是一個使用Opencv級聯分類器進行人臉檢測的例子。在該例子中,首先使用CascadeClassifier類載入了分類器的XML文件,然後通過它的detectMultiScale()函數對圖片進行檢測,返回檢測到的人臉的矩形框,最後使用rectangle()函數將矩形框畫出來。

二、Opencv級聯分類器優缺點

Opencv級聯分類器有著如下優點:

  • 能夠快速地進行目標檢測。
  • 可對多種類別的目標進行檢測。
  • 模型文件體積小,適合在嵌入式系統中使用。
  • 不需要手動選擇特徵。

而其缺點主要有:

  • 分類器設置參數較多,需要大量實驗和調整。
  • 準確率與訓練數據量、圖片質量等因素有關,影響因素多且難以確定。

三、Opencv級聯分類器作用

Opencv級聯分類器主要作用是對圖像進行目標檢測,特別是在人臉、車牌、行人等領域有著廣泛應用。它通常被用於實時視頻監控、人臉識別、安防監控等場景。

四、Opencv級聯分類器使用

Opencv級聯分類器的使用相對簡單,只需要載入分類器XML文件,然後通過其detectMultiScale()函數對圖片進行檢測即可。下面是一個使用級聯分類器進行車牌檢測的例子。


//使用Opencv級聯分類器進行車牌檢測
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{
    //載入分類器
    CascadeClassifier plate_cascade;
    plate_cascade.load("./haarcascade_russian_plate_number.xml");

    //讀取圖片
    Mat src = imread("test.jpg", IMREAD_COLOR);
    if (src.empty())
    {
        cout << "圖片讀取失敗!" << endl;
        return -1;
    }

    //檢測車牌
    vector<Rect> plates;
    plate_cascade.detectMultiScale(src, plates, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(80, 30));

    //標出車牌位置
    for (size_t i = 0; i < plates.size(); i++)
    {
        rectangle(src, plates[i], Scalar(0, 0, 255), 2);
    }

    //顯示結果
    namedWindow("result", WINDOW_NORMAL);
    imshow("result", src);
    waitKey(0);
    return 0;
}

五、Opencv級聯分類器訓練

Opencv級聯分類器的訓練需要提供正、負樣本圖片,並通過訓練工具生成模型文件。下面是一份訓練人臉檢測模型的步驟:

  1. 準備正樣本圖片:從圖片庫中提取包含人臉的照片,大小一致,保存為.bmp格式。
  2. 準備負樣本圖片:從圖片庫中提取不包含人臉的照片,大小一致,保存為.bmp格式。
  3. 將正、負樣本圖片打成.vec文件。
  4. 
            opencv_createsamples -img positive_image.bmp -bg negative_images.txt -info info/info.lst -pngoutput info -maxxangle 0.5 -maxyangle 0.5 -maxzangle 0.5 -num 1950
            opencv_createsamples -info info/info.lst -num 1950 -w 20 -h 20 -vec positive.vec
        
  5. 訓練分類器模型。
  6. 
            opencv_traincascade -data data -vec positve.vec -bg negative_images.txt -numPos 1800 -numNeg 900 -numStages 10 -w 20 -h 20
        

六、Opencv級聯分類器是什麼

Opencv級聯分類器是基於Haar特徵的分類器,用於目標檢測。其基本原理是將圖片中的區域劃分成多個小區域,對每個小區域進行Haar特徵運算,判斷其是否為目標物體,再將每個小區域的結果組合起來得出整張圖片的判斷結果。

七、Opencv級聯分類器原理

Opencv級聯分類器的原理主要有兩部分:Haar特徵與AdaBoost演算法。

Haar特徵是一種快速計算圖像特徵的方法,通過對圖像中不同位置的像素點進行相加或相減,將其作為分類器的特徵輸入。

AdaBoost演算法是一種弱分類器提升演算法,具體流程為:

  • 首先選擇一個分類器,並訓練出一個弱分類器。
  • 根據訓練數據中被分類錯誤的樣本權重重新賦值,分配給下一個分類器。
  • 迭代多次,每次選取權重提升最大的分類器並加入分類器組中。
  • 最終將多個弱分類器組合成一個強分類器,即級聯分類器。

八、Opencv級聯分類器準確率

Opencv級聯分類器的準確率可以通過檢測正確率、誤檢率等指標進行衡量。該指標與訓練數據量、圖片質量等影響因素密切相關。通常經過優化的級聯分類器,可以達到較高的檢測準確率。

九、Opencv級聯分類器正樣本不夠

在訓練Opencv級聯分類器時,正樣本不夠會影響模型的訓練效果。可以通過以下方法處理:

  • 利用正樣本圖像的鏡像、旋轉、平移等操作增強樣本數量。
  • 手動從圖片庫中尋找符合要求的正樣本圖片。
  • 利用在線圖片庫補充正樣本,如Google Image、Baidu Image等。

十、Opencv級聯分類器快速訓練工具

Opencv級聯分類器的快速訓練工具可以幫助用戶快速地訓練一個基礎的級聯分類器,使用方法如下:

  1. 準備正、負樣本圖片。
  2. 下載快速訓練器源碼。
  3. 配置訓練參數:
  4. 
            -data <cascade_dir_name> //級聯分類器輸出目錄
            -vec <positive_samples.vec> //正樣本.vec文件
            -bg <negative_samples.txt> //負樣本列表
            -numStages <number> //級聯分類器階段數
            -minHitRate <number> //最小命中率
            -maxFalseAlarmRate <number> //最大誤報率
            -numPos <number> //正樣本數量
            -numNeg <number> //負樣本數量
            -w <width> //最小的感興趣區域寬度
            -h <height> //最小的感興趣區域高度
            -mode<MODE> //訓練模式:BASIC(default)|CORE|ALL
        
  5. 運行訓練。
  6. 
            opencv_traincascade -data data -vec positve.vec -bg negative_images.txt -numPos 1800 -numNeg 900 -numStages 10 -w 20 -h 20
        

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286849.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-23 03:48
下一篇 2024-12-23 03:48

相關推薦

  • 如何在PyCharm中安裝OpenCV?

    本文將從以下幾個方面詳細介紹如何在PyCharm中安裝OpenCV。 一、安裝Python 在安裝OpenCV之前,請確保已經安裝了Python。 如果您還沒有安裝Python,可…

    編程 2025-04-29
  • Python OpenCV 直線檢測

    本文將介紹在Python OpenCV中進行直線檢測的方法,主要涉及到圖像的邊緣檢測、霍夫變換和繪製直線等操作。 一、邊緣檢測 由於直線檢測是從圖像的邊緣開始的,因此必須先找到圖像…

    編程 2025-04-29
  • Opencv 實現讀取 BMP 圖片

    Opencv 是一個基於 C/C++ 語言的開源計算機視覺庫,可以用於圖像處理、特徵識別、目標跟蹤、機器學習等領域。在圖像處理中,讀取 BMP 圖片是常見操作之一。 一、打開 BM…

    編程 2025-04-27
  • opencv滑鼠繪圖

    本文將為您詳細介紹如何使用opencv在原始圖片上進行滑鼠繪圖。 一、準備工作 在開始繪製之前,您需要先準備好以下的工作: 1、安裝opencv庫,可以通過pip install …

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25

發表回復

登錄後才能評論