之前簡答得實現了一下人臉檢測,不過使用的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 ...