OpenCV結合V4l2實現人臉檢測

2021-07-26 03:32:00 字數 2457 閱讀 7233

之前簡答得實現了一下人臉檢測,不過使用的opencv自帶的攝像頭操作函式,然而那個並不能使用在嵌入式裝置上,為了通用性,我將讓opencv使用v4l2獲得的資料幀進行檢測。

說明

v4l2其實並不難,只不過大家容易被網上那動輒幾百行的**唬住,那些**大多都是在檢錯,因為操作硬體這種事情出錯的概率確實很高,每一步都可能出錯,但是核心的語句也就那幾行,這裡推薦這幾篇文章(點我跳轉),我都已經仔細讀過,含金量比較高,當然英語好直接都自帶文件也是極好的。

opencv與v4l2結合的問題就是資料格式,因為我使用的是qt,v4l2獲得的資料幀會轉換為qimage型別,opencv則主要使用mat型別,不過不用擔心,簡單轉換一下就可以了,這篇文章給出了轉換方式,由於是乙個工程,所以只上opencv部分的**了。

**

#include "facedetect.h"

facedetect::facedetect()

void facedetect::setmatimagefromqimage(qimage img)

qimage facedetect::getqimage()

qimage facedetect::cvmat2qimage(const cv::mat& mat)

// copy input mat

uchar *psrc = mat.data;

for(int row = 0; row < mat.rows; row ++)

return image;

}// 8-bits unsigned, no. of channels = 3

else

if(mat.type() == cv_8uc3)

else

if(mat.type() == cv_8uc4)

else

}mat facedetect::qimage2cvmat(qimage image)

return mat;

}mat facedetect::detectanddraw( mat& img, cascadeclassifier& cascade,

cascadeclassifier& nestedcascade,

double scale, bool tryflip )

; mat gray, smallimg;

cvtcolor( img, gray, color_bgr2gray );

double fx = 1 / scale;

resize( gray, smallimg, size(), fx, fx, inter_linear );

equalizehist( smallimg, smallimg );

t = (double)gettickcount();

cascade.detectmultiscale( smallimg, faces,

1.1, 2, 0

//|cascade_find_biggest_object

//|cascade_do_rough_search

|cascade_scale_image,

size(30, 30) );

if( tryflip )

}t = (double)gettickcount() - t;

//printf( "detection time = %g ms\n", t*1000/gettickfrequency());

for ( size_t i = 0; i < faces.size(); i++ )

else

rectangle( img, cvpoint(cvround(r.x*scale), cvround(r.y*scale)),

cvpoint(cvround((r.x + r.width-1)*scale), cvround((r.y + r.height-1)*scale)),

color, 3, 8, 0);

if( nestedcascade.empty() )

continue;

smallimgroi = smallimg( r );

nestedcascade.detectmultiscale( smallimgroi, nestedobjects,

1.1, 2, 0

//|cascade_find_biggest_object

//|cascade_do_rough_search

//|cascade_do_canny_pruning

|cascade_scale_image,

size(30, 30) );

for ( size_t j = 0; j < nestedobjects.size(); j++ )

}//imshow( "result", img );

return img;

}

OpenCV結合V4l2實現人臉檢測以及人臉識別

該demo的基礎是之前的opencv人臉檢測以及v4l2攝像頭驅動程式,在此基礎上新增人臉識別功能,由於需要鑑別特定人臉,因此需要進行訓練生成xml格式的級聯分類器,然後載入此分類器即可實現特定人臉的識別。說明 本demo使用的是基於lbph的facerecongnizer,思路為首先構造lbphf...

V4L2程式設計

include include include include include include include include include include typedef struct buftype buftype user buf int n buffer 0 開啟攝像頭裝置 int ope...

V4L2 程式設計

v4l2程式設計 1.定義 2.工作流程 開啟裝置 檢查和設定裝置屬性 設定幀格式 設定一種輸入輸出方法 緩衝區管理 迴圈獲取資料 關閉裝置。3.裝置的開啟和關閉 include int open const char device name,int flags include int close ...