日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV人脸识别Eigen算法源码分析

發(fā)布時(shí)間:2025/3/21 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV人脸识别Eigen算法源码分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 理論基礎(chǔ)

學(xué)習(xí)Eigen人臉識(shí)別算法需要了解一下它用到的幾個(gè)理論基礎(chǔ),現(xiàn)總結(jié)如下:

1.1 協(xié)方差矩陣

?首先需要了解一下公式:

共公式可以看出:均值描述的是樣本集合的平均值,而標(biāo)準(zhǔn)差描述的則是樣本集合的各個(gè)樣本點(diǎn)到均值的距離之平均。以一個(gè)國(guó)家國(guó)民收入為例,均值反映了平均收入,而均方差/方差則反映了貧富差距,如果兩個(gè)國(guó)家國(guó)民收入均值相等,則標(biāo)準(zhǔn)差越大說(shuō)明國(guó)家的國(guó)民收入越不均衡,貧富差距較大。以上公式都是用來(lái)描述一維數(shù)據(jù)量的,把方差公式推廣到二維,則可得到協(xié)方差公式:

協(xié)方差表明了兩個(gè)隨機(jī)變量之間的相關(guān)性,值為正說(shuō)明兩者是正相關(guān)的,值為負(fù)說(shuō)明兩者是負(fù)相關(guān)的,值為零說(shuō)明兩者不相關(guān),舉一個(gè)簡(jiǎn)單的小例子,假設(shè)一個(gè)人用4個(gè)維度身高、體重、距離屋頂?shù)母叨取⒚刻飚?huà)畫(huà)的時(shí)間來(lái)表示:身高取樣X(jué)=[1 2 3 4 5 6 7 8 9],體重取樣Y=[11 12 13 14 15 16 17 18 19],距離屋頂?shù)母叨热覼=[9 8 7 6 5 4 3 2 1],每天畫(huà)畫(huà)時(shí)間L=[1 1 1 1 1 1 1 1 1],則有cov(X,Y)=7.5,cov(X,Z)=-7.5,cov(X,L)=0,結(jié)果很明顯X和Y協(xié)方差為正數(shù)兩者正相關(guān),X和Z協(xié)方差為負(fù)數(shù)兩者負(fù)相關(guān),X和L協(xié)方差為0,說(shuō)明它們不相關(guān)。以上例子每一個(gè)隨機(jī)變量都可以表示一個(gè)維度,我們計(jì)算了部分維度之間的協(xié)方差,計(jì)算所有維度之間的協(xié)方差并組織成矩陣的形式,就有了協(xié)方差矩陣的概念:Cnxn=[ci,j]=[cov(Dimi,Dimj)] ? i,j=1,2,…,n,Dimi表示第i個(gè)維度向量。以Matlab協(xié)方差矩陣為例,將X,Y,Z,L分別作為1,2,3,4個(gè)維度,則有c1,1=7.5,c1,2=7.5,c1,3=-7.5,c1,4=7.5……,所以協(xié)方差矩陣為:

?

在Matlab中可以把矩陣的每行看做是4個(gè)隨機(jī)變量的一組取樣樣本,每列看做是一個(gè)維度,則可以直接用con函數(shù)求得4個(gè)維度的協(xié)方差矩陣:

1.2?Jacobi迭代法求對(duì)稱(chēng)矩陣特征向量及特征值

?雅可比迭代法的基本思想是:通過(guò)一組平面旋轉(zhuǎn)變換(相似正交變換)化對(duì)稱(chēng)矩陣A為對(duì)角矩陣,進(jìn)而求出A的特征值與特征向量。由線(xiàn)性代數(shù)理論可知:若矩陣A是實(shí)對(duì)稱(chēng)矩陣,則一定存在正交矩陣U,使得UT*A*U=D,其中D對(duì)角矩陣,其主對(duì)角線(xiàn)元素λi是A的特征值,正交矩陣U的第i列是A對(duì)應(yīng)特征值λi的特征向量。于是求對(duì)稱(chēng)矩陣A的特征值問(wèn)題轉(zhuǎn)化為尋找正交矩陣U,使得UT*A*U為對(duì)角矩陣,這個(gè)問(wèn)題的困難在于如何構(gòu)造U,為此我們先看一下平面上的旋轉(zhuǎn)變換:

則有:

其中:

上述推導(dǎo)其實(shí)說(shuō)明了一種構(gòu)造正交矩陣P,并使得PT*A*P為對(duì)角矩陣的方法,可以將這種方法推廣到nxn對(duì)角矩陣,首先引入n階旋轉(zhuǎn)矩陣(Givens矩陣)的概念:

平面旋轉(zhuǎn)矩陣有如下性質(zhì):

(1)Upq為正交矩陣,即UpqT*Upq=E

(2)UTAU=B仍為對(duì)稱(chēng)矩陣,且B與A有相同的特征值

Jacobi迭代法,在每一次迭代時(shí)都是進(jìn)行一次(2)中的轉(zhuǎn)換,這里p、q分別是前一次的迭代矩陣A的非主對(duì)角線(xiàn)上絕對(duì)值最大元素的行列號(hào),變換后元素值可以由以下公式求出:

由公式可以看出轉(zhuǎn)換后矩陣相比原矩陣只是在p,q行和列的元素發(fā)生了改變,旋轉(zhuǎn)角的計(jì)算過(guò)程和2維時(shí)一樣,其意義是使得apq和aqp值為零,這樣每次迭代都使得非對(duì)角線(xiàn)上絕對(duì)值最大的元素變?yōu)榱?#xff0c;所以整個(gè)迭代的過(guò)程就是使對(duì)角線(xiàn)外元素逐步逼近于零,這是對(duì)角線(xiàn)上的元素即為原對(duì)稱(chēng)矩陣的特征值λi。在進(jìn)行Jacobi迭代時(shí),假如i次迭代時(shí)旋轉(zhuǎn)矩陣為Ui,每次迭代對(duì)單位矩陣I依次左乘Ui,最終迭代結(jié)束后可得矩陣D=Uk…U2U1I,這里k為迭代次數(shù),則可以證明D的列向量即為特征值λi對(duì)應(yīng)的特征向量,證明如下:

上述推導(dǎo)過(guò)程中di為矩陣D的i列表示的列向量,由最后的等式及特征值定義,可以得知λi是A的特征值,di為對(duì)應(yīng)的特征向量。

2 OpenCV源碼解析

2.1 關(guān)鍵函數(shù)

(1)void reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype=-1)

其英文注釋:transforms 2D matrix to 1D row or column vector by taking sum, minimum, maximum or mean value over all the rows.

其英文注釋不太準(zhǔn)確,函數(shù)的作用其實(shí)是:將2維矩陣轉(zhuǎn)換為1維行向量或列向量,如轉(zhuǎn)換為行向量,則每列處的值為原矩陣對(duì)應(yīng)列所有值的和,最小值,最大值,平均值;如轉(zhuǎn)換為列向量,則每行處的值為原矩陣對(duì)應(yīng)行所有值的和。該函數(shù)參數(shù)意義如下:

src: 原矩陣

dst: 目的向量

dim: 指明處理后向量是行向量還是列向量,0原矩陣被處理成行向量,否則原矩陣被處理成列向量

op: 取值為CV_REDUCE_SUM,CV_REDUCE_MAX,CV_REDUCE_MIN,CV_REDUCE_AVG之一

dtype: 目的向量類(lèi)型

(2)void gemm(InputArray src1, InputArray src2, double alpha,?InputArray src3, double gamma, OutputArray dst, int flags=0)

其英文注釋:implements generalized matrix product algorithm GEMM from BLAS.

函數(shù)的作用:實(shí)現(xiàn)廣義矩陣乘法,只對(duì)最后一個(gè)參數(shù)進(jìn)行說(shuō)明

flags: 取值為GEMM_1_T,GEMM_2_T,GEMM_3_T之1或者它們的組合,例如取值為GEMM_1_T則進(jìn)行乘法之前對(duì)src1進(jìn)行轉(zhuǎn)置,所有函數(shù)作用可由以下公式來(lái)說(shuō)明:

dst=alpha*op(src1)*op(src2)+gamma*op(src3),其中op(X)是X還是XT由flags確定。

(3)void mulTransposed( InputArray src, OutputArray dst, bool aTa,?InputArray delta=noArray(),?double scale=1, int dtype=-1 )

其英文注釋:multiplies matrix by its transposition from the left or from the right.

函數(shù)的作用:矩陣左乘或右乘其轉(zhuǎn)置矩陣,參數(shù)意思如下:

src: 原矩陣

dst: 目的矩陣

ata: 乘法順序,true AT*A false A*AT

delta:在進(jìn)行乘法前src先減去該數(shù)組

scale:乘法之后對(duì)結(jié)果進(jìn)行scale倍縮放

dtype:目的矩陣類(lèi)型

當(dāng)ata為真時(shí)可用公式 dst=(src-delta)T*(src-delta)*scale 來(lái)說(shuō)明函數(shù)的作用,該函數(shù)內(nèi)部調(diào)用了函數(shù)(2)

(4)void calcCovarMatrix( InputArray samples, OutputArray covar,?OutputArray mean, int flags, int ctype=CV_64F)

其英文注釋:computes covariation matrix of a set of samples

函數(shù)作用:計(jì)算矩陣行向量或列向量的協(xié)方差矩陣,該函數(shù)中會(huì)調(diào)用函數(shù)(3)來(lái)實(shí)現(xiàn)相應(yīng)功能

(5)bool eigen(InputArray src, OutputArray eigenvalues,?OutputArray eigenvectors,?int lowindex=-1, int highindex=-1)

其英文解釋:finds eigenvalues and eigenvectors of a symmetric matrix

函數(shù)作用:求對(duì)稱(chēng)矩陣的特征值和特征向量,在該函數(shù)中會(huì)利用Jacobi方法來(lái)求對(duì)稱(chēng)矩陣的特征值和特征向量

2.2 主要過(guò)程

? ?特征臉EigenFace的思想是把人臉從像素空間變換到另一個(gè)空間,在另一個(gè)空間中做相似性計(jì)算,EigenFace選擇的空間變換方法是PCA,就是大名鼎鼎的主成分分析。EigenFace方法利用PCA得到人臉?lè)植嫉闹鞒煞?#xff0c;具體實(shí)現(xiàn)是對(duì)訓(xùn)練集中的所有人臉圖像的協(xié)方差矩陣進(jìn)行求特征值,特征值對(duì)應(yīng)的特征向量就是所謂的“特征臉”,每個(gè)特征向量描述人臉的一種變化或者特征,所以每個(gè)人臉都可以表示為這些特征臉的線(xiàn)性組合。下面結(jié)合以AT&T人臉庫(kù)(40個(gè)人每個(gè)人包含10個(gè)表情臉圖像,共400個(gè)臉部圖像,每個(gè)圖像分辨率為92x112),取其中399個(gè)人臉為樣本庫(kù),最后1個(gè)為待識(shí)別人臉,給出基于Eigen特征臉的人臉識(shí)別實(shí)現(xiàn)過(guò)程:

(1)將訓(xùn)練集中的每一個(gè)人臉圖像數(shù)據(jù)都拉長(zhǎng)成一行,并將他們組合在一起形成一個(gè)大矩陣A,則A的大小為399x10304,即399行10304列。

(2)將399個(gè)人臉每個(gè)人臉對(duì)應(yīng)的維度數(shù)據(jù)相加,然后求平均值,得到平均值向量Mean1x10304,將矩陣A的每一行都減去平均值向量得到差值矩陣B。

(3)計(jì)算協(xié)方差矩陣C=B*BT,C的維度是399x399,再對(duì)C求特征值λi,及特征向量ei,0<=i<399。

(4)上一步驟中其實(shí)并不是真正的人臉取樣集協(xié)方差矩陣,因?yàn)槿四樔拥木S度是10304,而協(xié)方差矩陣反應(yīng)的是各個(gè)維度之前的相關(guān)性,所以人臉取樣集真正的協(xié)方差矩陣是C'=CT=BT*B,如果vi是C'的第i個(gè)特征向量,可以證明λi同樣是C'的特征值,且vi=BT*ei(vi是10304行列向量),證明如下:

C*eii*ei ?=> ?B*BT*eii*ei ?=> ?BT*B*BT*eii*BT*ei? => ?C'*vii*vi?

特征向量vi即為“特征臉”,所有特征向量組成特征向量矩陣V10304*399,則對(duì)于任意人臉向量α,將它與特征向量矩陣V相乘,將得到向量α在各個(gè)特征向量的投影,即α*V所得向量的每一個(gè)元素為α在對(duì)應(yīng)“特征臉”的投影,在進(jìn)行識(shí)別時(shí),先求得待識(shí)別人臉向量在“特征臉”的投影向量,之后和每個(gè)樣本臉的投影向量進(jìn)行相似度比較,相似度最低者為最佳匹配。

2.3 核心源碼

代碼取自O(shè)pencv2.4.9

1 void Eigenfaces::train(InputArrayOfArrays _src, InputArray _local_labels) { 2 if(_src.total() == 0) { 3 string error_message = format("Empty training data was given. You'll need more than one sample to learn a model."); 4 CV_Error(CV_StsBadArg, error_message); 5 } else if(_local_labels.getMat().type() != CV_32SC1) { 6 string error_message = format("Labels must be given as integer (CV_32SC1). Expected %d, but was %d.", CV_32SC1, _local_labels.type()); 7 CV_Error(CV_StsBadArg, error_message); 8 } 9 // make sure data has correct size 10 if(_src.total() > 1) { 11 for(int i = 1; i < static_cast<int>(_src.total()); i++) { 12 if(_src.getMat(i-1).total() != _src.getMat(i).total()) { 13 string error_message = format("In the Eigenfaces method all input samples (training images) must be of equal size! Expected %d pixels, but was %d pixels.", _src.getMat(i-1).total(), _src.getMat(i).total()); 14 CV_Error(CV_StsUnsupportedFormat, error_message); 15 } 16 } 17 } 18 // get labels 19 Mat labels = _local_labels.getMat(); 20 // observations in row 21 Mat data = asRowMatrix(_src, CV_64FC1); 22 23 // number of samples 24 int n = data.rows; 25 // assert there are as much samples as labels 26 if(static_cast<int>(labels.total()) != n) { 27 string error_message = format("The number of samples (src) must equal the number of labels (labels)! len(src)=%d, len(labels)=%d.", n, labels.total()); 28 CV_Error(CV_StsBadArg, error_message); 29 } 30 // clear existing model data 31 _labels.release(); 32 _projections.clear(); 33 // clip number of components to be valid 34 if((_num_components <= 0) || (_num_components > n)) 35 _num_components = n; 36 37 // perform the PCA 38 PCA pca(data, Mat(), CV_PCA_DATA_AS_ROW, _num_components); 39 // copy the PCA results 40 _mean = pca.mean.reshape(1,1); // store the mean vector 41 _eigenvalues = pca.eigenvalues.clone(); // eigenvalues by row 42 transpose(pca.eigenvectors, _eigenvectors); // eigenvectors by column 43 // store labels for prediction 44 _labels = labels.clone(); 45 // save projections 46 for(int sampleIdx = 0; sampleIdx < data.rows; sampleIdx++) { 47 Mat p = subspaceProject(_eigenvectors, _mean, data.row(sampleIdx)); 48 _projections.push_back(p); 49 } 50 } 人臉樣本訓(xùn)練過(guò)程

?38行的PCA類(lèi)中實(shí)現(xiàn)了求樣本矩陣的協(xié)方差矩陣、求協(xié)方差矩陣特征向量等核心功能,47行_mean為人臉平均值向量,該行其實(shí)是求每一個(gè)人臉向量減去平均值向量在“特征臉”集上的投影向量。

1 PCA& PCA::operator()(InputArray _data, InputArray __mean, int flags, int maxComponents) 2 { 3 Mat data = _data.getMat(), _mean = __mean.getMat(); 4 int covar_flags = CV_COVAR_SCALE; 5 int i, len, in_count; 6 Size mean_sz; 7 8 CV_Assert( data.channels() == 1 ); 9 if( flags & CV_PCA_DATA_AS_COL ) 10 { 11 len = data.rows; 12 in_count = data.cols; 13 covar_flags |= CV_COVAR_COLS; 14 mean_sz = Size(1, len); 15 } 16 else 17 { 18 len = data.cols; 19 in_count = data.rows; 20 covar_flags |= CV_COVAR_ROWS; 21 mean_sz = Size(len, 1); 22 } 23 24 int count = std::min(len, in_count), out_count = count; 25 if( maxComponents > 0 ) 26 out_count = std::min(count, maxComponents); 27 28 // "scrambled" way to compute PCA (when cols(A)>rows(A)): 29 // B = A'A; B*x=b*x; C = AA'; C*y=c*y -> AA'*y=c*y -> A'A*(A'*y)=c*(A'*y) -> c = b, x=A'*y 30 if( len <= in_count ) 31 covar_flags |= CV_COVAR_NORMAL; 32 33 int ctype = std::max(CV_32F, data.depth()); 34 mean.create( mean_sz, ctype ); 35 36 Mat covar( count, count, ctype ); 37 38 if( _mean.data ) 39 { 40 CV_Assert( _mean.size() == mean_sz ); 41 _mean.convertTo(mean, ctype); 42 covar_flags |= CV_COVAR_USE_AVG; 43 } 44 45 calcCovarMatrix( data, covar, mean, covar_flags, ctype ); 46 eigen( covar, eigenvalues, eigenvectors ); 47 48 if( !(covar_flags & CV_COVAR_NORMAL) ) 49 { 50 // CV_PCA_DATA_AS_ROW: cols(A)>rows(A). x=A'*y -> x'=y'*A 51 // CV_PCA_DATA_AS_COL: rows(A)>cols(A). x=A''*y -> x'=y'*A' 52 Mat tmp_data, tmp_mean = repeat(mean, data.rows/mean.rows, data.cols/mean.cols); 53 if( data.type() != ctype || tmp_mean.data == mean.data ) 54 { 55 data.convertTo( tmp_data, ctype ); 56 subtract( tmp_data, tmp_mean, tmp_data ); 57 } 58 else 59 { 60 subtract( data, tmp_mean, tmp_mean ); 61 tmp_data = tmp_mean; 62 } 63 64 Mat evects1(count, len, ctype); 65 gemm( eigenvectors, tmp_data, 1, Mat(), 0, evects1, 66 (flags & CV_PCA_DATA_AS_COL) ? CV_GEMM_B_T : 0); 67 eigenvectors = evects1; 68 69 // normalize eigenvectors 70 for( i = 0; i < out_count; i++ ) 71 { 72 Mat vec = eigenvectors.row(i); 73 normalize(vec, vec); 74 } 75 } 76 77 if( count > out_count ) 78 { 79 // use clone() to physically copy the data and thus deallocate the original matrices 80 eigenvalues = eigenvalues.rowRange(0,out_count).clone(); 81 eigenvectors = eigenvectors.rowRange(0,out_count).clone(); 82 } 83 return *this; 84 } PCA類(lèi)核心代碼

45行求樣本矩陣的協(xié)方差矩陣,46行求協(xié)方差矩陣的特征值及特征向量。

1 void Eigenfaces::predict(InputArray _src, int &minClass, double &minDist) const { 2 // get data 3 Mat src = _src.getMat(); 4 // make sure the user is passing correct data 5 if(_projections.empty()) { 6 // throw error if no data (or simply return -1?) 7 string error_message = "This Eigenfaces model is not computed yet. Did you call Eigenfaces::train?"; 8 CV_Error(CV_StsError, error_message); 9 } else if(_eigenvectors.rows != static_cast<int>(src.total())) { 10 // check data alignment just for clearer exception messages 11 string error_message = format("Wrong input image size. Reason: Training and Test images must be of equal size! Expected an image with %d elements, but got %d.", _eigenvectors.rows, src.total()); 12 CV_Error(CV_StsBadArg, error_message); 13 } 14 // project into PCA subspace 15 Mat q = subspaceProject(_eigenvectors, _mean, src.reshape(1,1)); 16 minDist = DBL_MAX; 17 minClass = -1; 18 for(size_t sampleIdx = 0; sampleIdx < _projections.size(); sampleIdx++) { 19 double dist = norm(_projections[sampleIdx], q, NORM_L2); 20 if((dist < minDist) && (dist < _threshold)) { 21 minDist = dist; 22 minClass = _labels.at<int>((int)sampleIdx); 23 } 24 } 25 } 人臉識(shí)別核心代碼

?15行求待識(shí)別人臉向量減去人臉平均值向量在“特征臉”集上的投影向量X,19行求X與人臉樣本投影向量的歐幾里得距離(把此距離作為人臉相似度),20~23行取最小距離為識(shí)別結(jié)果。

3 示例代碼

最后給出Eigen人臉識(shí)別的示例代碼,代碼中仍使用AT&T人臉庫(kù),其下載地址見(jiàn)上一篇隨筆。

1 #include "opencv2/core/core.hpp" 2 #include "opencv2/highgui/highgui.hpp" 3 #include "opencv2/contrib/contrib.hpp" 4 5 #define CV_VERSION_ID CVAUX_STR(CV_MAJOR_VERSION) CVAUX_STR(CV_MINOR_VERSION) CVAUX_STR(CV_SUBMINOR_VERSION) 6 7 #ifdef _DEBUG 8 #define cvLIB(name) "opencv_" name CV_VERSION_ID "d" 9 #else 10 #define cvLIB(name) "opencv_" name CV_VERSION_ID 11 #endif 12 13 #pragma comment( lib, cvLIB("core") ) 14 #pragma comment( lib, cvLIB("imgproc") ) 15 #pragma comment( lib, cvLIB("highgui") ) 16 #pragma comment( lib, cvLIB("flann") ) 17 #pragma comment( lib, cvLIB("features2d") ) 18 #pragma comment( lib, cvLIB("calib3d") ) 19 #pragma comment( lib, cvLIB("gpu") ) 20 #pragma comment( lib, cvLIB("legacy") ) 21 #pragma comment( lib, cvLIB("ml") ) 22 #pragma comment( lib, cvLIB("objdetect") ) 23 #pragma comment( lib, cvLIB("ts") ) 24 #pragma comment( lib, cvLIB("video") ) 25 #pragma comment( lib, cvLIB("contrib") ) 26 #pragma comment( lib, cvLIB("nonfree") ) 27 28 #include <iostream> 29 #include <fstream> 30 #include <sstream> 31 32 using namespace cv; 33 using namespace std; 34 35 static Mat toGrayscale(InputArray _src) { 36 Mat src = _src.getMat(); 37 // only allow one channel 38 if(src.channels() != 1) { 39 CV_Error(CV_StsBadArg, "Only Matrices with one channel are supported"); 40 } 41 // create and return normalized image 42 Mat dst; 43 cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC1); 44 return dst; 45 } 46 47 static void read_csv(const string& filename, vector<Mat>& images, vector<int>& labels, char separator = ';') { 48 std::ifstream file(filename.c_str(), ifstream::in); 49 if (!file) { 50 string error_message = "No valid input file was given, please check the given filename."; 51 CV_Error(CV_StsBadArg, error_message); 52 } 53 string line, path, classlabel; 54 while (getline(file, line)) { 55 stringstream liness(line); 56 getline(liness, path, separator); 57 getline(liness, classlabel); 58 if(!path.empty() && !classlabel.empty()) { 59 images.push_back(imread(path, 0)); 60 labels.push_back(atoi(classlabel.c_str())); 61 } 62 } 63 } 64 65 int main(int argc, const char *argv[]) { 66 // Check for valid command line arguments, print usage 67 // if no arguments were given. 68 if (argc != 2) { 69 cout << "usage: " << argv[0] << " <csv.ext>" << endl; 70 exit(1); 71 } 72 73 // Get the path to your CSV. 74 string fn_csv = string(argv[1]); 75 // These vectors hold the images and corresponding labels. 76 vector<Mat> images; 77 vector<int> labels; 78 // Read in the data. This can fail if no valid 79 // input filename is given. 80 try { 81 read_csv(fn_csv, images, labels); 82 } catch (cv::Exception& e) { 83 cerr << "Error opening file \"" << fn_csv << "\". Reason: " << e.msg << endl; 84 // nothing more we can do 85 exit(1); 86 } 87 // Quit if there are not enough images for this demo. 88 if(images.size() <= 1) { 89 string error_message = "This demo needs at least 2 images to work. Please add more images to your data set!"; 90 CV_Error(CV_StsError, error_message); 91 } 92 // Get the height from the first image. We'll need this 93 // later in code to reshape the images to their original 94 // size: 95 int height = images[0].rows; 96 // The following lines simply get the last images from 97 // your dataset and remove it from the vector. This is 98 // done, so that the training data (which we learn the 99 // cv::FaceRecognizer on) and the test data we test 100 // the model with, do not overlap. 101 Mat testSample = images[images.size() - 1]; 102 int testLabel = labels[labels.size() - 1]; 103 images.pop_back(); 104 labels.pop_back(); 105 // The following lines create an Eigenfaces model for 106 // face recognition and train it with the images and 107 // labels read from the given CSV file. 108 // This here is a full PCA, if you just want to keep 109 // 10 principal components (read Eigenfaces), then call 110 // the factory method like this: 111 // 112 // cv::createEigenFaceRecognizer(10); 113 // 114 // If you want to create a FaceRecognizer with a 115 // confidennce threshold, call it with: 116 // 117 // cv::createEigenFaceRecognizer(10, 123.0); 118 // 119 Ptr<FaceRecognizer> model = createEigenFaceRecognizer(); 120 model->train(images, labels); 121 // The following line predicts the label of a given 122 // test image: 123 int predictedLabel = model->predict(testSample); 124 // 125 // To get the confidence of a prediction call the model with: 126 // 127 // int predictedLabel = -1; 128 // double confidence = 0.0; 129 // model->predict(testSample, predictedLabel, confidence); 130 // 131 string result_message = format("Predicted class = %d / Actual class = %d.", predictedLabel, testLabel); 132 cout << result_message << endl; 133 // Sometimes you'll need to get/set internal model data, 134 // which isn't exposed by the public cv::FaceRecognizer. 135 // Since each cv::FaceRecognizer is derived from a 136 // cv::Algorithm, you can query the data. 137 // 138 // First we'll use it to set the threshold of the FaceRecognizer 139 // to 0.0 without retraining the model. This can be useful if 140 // you are evaluating the model: 141 // 142 model->set("threshold", 0.0); 143 // Now the threshold of this model is set to 0.0. A prediction 144 // now returns -1, as it's impossible to have a distance below 145 // it 146 predictedLabel = model->predict(testSample); 147 cout << "Predicted class = " << predictedLabel << endl; 148 // Here is how to get the eigenvalues of this Eigenfaces model: 149 Mat eigenvalues = model->getMat("eigenvalues"); 150 // And we can do the same to display the Eigenvectors (read Eigenfaces): 151 Mat W = model->getMat("eigenvectors"); 152 // From this we will display the (at most) first 10 Eigenfaces: 153 for (int i = 0; i < min(10, W.cols); i++) { 154 string msg = format("Eigenvalue #%d = %.5f", i, eigenvalues.at<double>(i)); 155 cout << msg << endl; 156 // get eigenvector #i 157 Mat ev = W.col(i).clone(); 158 // Reshape to original size & normalize to [0...255] for imshow. 159 Mat grayscale = toGrayscale(ev.reshape(1, height)); 160 // Show the image & apply a Jet colormap for better sensing. 161 Mat cgrayscale; 162 applyColorMap(grayscale, cgrayscale, COLORMAP_JET); 163 imshow(format("%d", i), cgrayscale); 164 } 165 waitKey(0); 166 167 return 0; 168 }

程序運(yùn)行結(jié)果及用偽彩色圖像顯示的前10個(gè)特征臉,如圖所示:

本博客參考了以下資料,一并致謝!

http://www.cnblogs.com/guoming0000/archive/2012/09/27/2706019.html

http://blog.csdn.net/zouxy09/article/details/45276053

http://blog.csdn.net/zhouxuguang236/article/details/40212143

http://wenku.baidu.com/view/6023207e168884868762d644.html

《數(shù)值分析簡(jiǎn)明教程》 王兵團(tuán) 張作泉 趙平福 編著

轉(zhuǎn)載于:https://www.cnblogs.com/zhaoweiwei/p/Eigen.html

總結(jié)

以上是生活随笔為你收集整理的OpenCV人脸识别Eigen算法源码分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国产精品视频最多的网站 | 国产精品国产亚洲精品看不卡15 | 国产精品视频不卡 | 四虎在线视频免费观看 | 亚洲欧美精品一区二区 | 99视频精品免费视频 | 国产精品精品国产 | 在线小视频你懂得 | 99riav1国产精品视频 | 久久人人爽人人片av | 9在线观看免费高清完整版 玖玖爱免费视频 | 999热线在线观看 | 久久伊人精品天天 | 中文字幕一区二区三区乱码在线 | 深夜免费网站 | 亚洲综合激情 | 狠狠色丁香婷婷综合橹88 | 亚洲黄色在线免费观看 | 91热爆在线观看 | 在线观看你懂的网站 | 久久久性 | 欧美性免费 | 国产精品久久久久久久久婷婷 | 91精品国产一区二区在线观看 | 在线黄色免费 | 麻豆国产网站 | 国内精品久久久久久久久久清纯 | 看v片| 看黄色91 | 国产亚洲精品精品精品 | 97精品久久人人爽人人爽 | 久久久精品国产免费观看一区二区 | 在线播放国产一区二区三区 | 日本三级不卡视频 | 亚洲精品国产日韩 | 欧美一级黄色片 | 免费av高清 | 国产一级大片在线观看 | 中国精品少妇 | 黄网站色 | 精品在线亚洲视频 | 成人91在线观看 | 久久综合视频网 | 亚洲精品国久久99热 | 国产成在线观看免费视频 | 网站免费黄色 | 久久精品福利 | 日韩免费视频线观看 | 久99热| 日韩一区二区免费视频 | 激情伊人五月天 | 免费在线黄网 | 中文字幕亚洲高清 | 免费日韩电影 | 天天综合成人网 | 日本精品一区二区三区在线播放视频 | 亚洲成年人在线播放 | 日韩精品久久久久久 | 人人干人人干人人干 | av电影免费在线看 | 欧美精品一区二区免费 | 狠狠狠狠狠狠狠 | 日韩在线短视频 | 国产精品九九久久久久久久 | 欧美精品久久人人躁人人爽 | 日韩免费在线视频 | 91丨九色丨蝌蚪丰满 | 成人欧美在线 | 国产精品热 | 在线影院中文字幕 | 日韩免| 中文字幕在线免费看线人 | 亚洲爱av| 西西4444www大胆艺术 | 国产一级久久 | 最新中文字幕在线资源 | 99久久综合国产精品二区 | 国产福利网站 | 成人手机在线视频 | 日韩一区二区在线免费观看 | 免费在线观看不卡av | 亚洲综合五月天 | 国产在线看 | 在线观看黄 | 最新av免费在线观看 | 天天干天天插 | 亚洲激情 | 日韩网站免费观看 | 一区二区三区电影大全 | 99c视频在线 | 国产精彩视频一区二区 | 日韩三级在线观看 | 中国一级片视频 | 在线观看国产v片 | 久久精品欧美一 | 国产精品96久久久久久吹潮 | 精品特级毛片 | 狠狠色噜噜狠狠狠狠 | 亚洲精品在线观 | 久久免费视频在线观看30 | 99综合电影在线视频 | 808电影 | 国产色一区 | 国产精品99蜜臀久久不卡二区 | 91九色最新| 午夜精品久久久久久久久久久 | 国产精品夜夜夜一区二区三区尤 | 久久久久久久99 | 91黄色小视频 | 久草精品视频在线观看 | 日韩电影在线观看一区二区三区 | 五月天天天操 | 日韩精品一区电影 | 九九久久成人 | 一区二区三区四区五区在线 | 免费视频黄色 | 久久精品视频免费观看 | 青青河边草免费观看 | www.日日操.com| 中文字幕在线免费看 | 精品国产大片 | 最新av观看| 久久视频网 | 在线国产不卡 | 国产精品久久久久永久免费观看 | 九九九热精品 | 国产精品12 | 91网址在线看 | 亚洲一区二区精品在线 | 韩国一区在线 | 九九九视频在线 | 毛片久久久 | 97精产国品一二三产区在线 | 成人高清在线 | 久久久久久美女 | 香蕉在线观看视频 | 久久国产热视频 | 久久久精品视频网站 | 欧亚久久 | 亚洲另类xxxx | h视频在线看 | 99爱国产精品 | 天操夜夜操 | 国产精品久久久久aaaa | 97在线视频免费播放 | 国产欧美精品一区二区三区四区 | 欧美一级免费片 | 久久y| 国产欧美最新羞羞视频在线观看 | 久久爱导航 | 最近中文字幕久久 | 国产无遮挡又黄又爽馒头漫画 | 九九热在线观看 | 午夜资源站 | 亚洲最新视频在线 | 成人网在线免费视频 | 久草视频免费在线观看 | 国产精品爽爽久久久久久蜜臀 | 最近日本字幕mv免费观看在线 | 国产精品免费一区二区三区 | 麻豆国产精品一区二区三区 | av色网站| 超碰人人超碰 | 狠狠狠色丁香婷婷综合久久88 | 亚洲天天综合网 | 国产精品自产拍在线观看网站 | 亚洲va欧美va人人爽春色影视 | 日日干影院 | 欧美国产在线看 | 98精品国产自产在线观看 | 99免费在线视频观看 | 国产一区二区日本 | 久久最新网址 | 日韩精品免费在线观看视频 | 日韩在线视频二区 | 亚洲综合成人婷婷小说 | 99久久99久久精品国产片 | 国产69精品久久久久99尤 | 成人免费在线电影 | 亚洲精品在线观看免费 | 中文字幕视频网 | 91av视频播放 | 色操插 | 97人人模人人爽人人少妇 | 日本久久久久 | 国产xvideos免费视频播放 | 国产精品中文 | 日日夜夜操操操操 | 91免费看黄 | 日韩二区在线 | 色综合网在线 | 国产精品久久久久影院 | 欧美91精品久久久久国产性生爱 | 91av电影网| 国产品久精国精产拍 | 天天综合狠狠精品 | 13日本xxxxxⅹxxx20 | 五月天久久久 | 国产精品99久久久久久武松影视 | 天天操夜夜曰 | 成人视屏免费看 | 久久国产精品99久久久久 | 在线播放一区 | 91丨porny丨九色 | 中文字幕精 | 一区二区三区在线看 | 99热国产精品 | 综合亚洲视频 | 青青久草在线视频 | 粉嫩av一区二区三区免费 | 国产免费xvideos视频入口 | 欧美男同网站 | 日韩久久网站 | 亚洲一级免费观看 | 日本特黄一级 | 久久免费成人精品视频 | 美女黄濒 | 黄色中文字幕在线 | 午夜精品999 | 国产中年夫妇高潮精品视频 | 六月婷婷色 | 久久婷婷丁香 | 日韩高清黄色 | 久久久久麻豆v国产 | 亚洲精品久久久蜜桃 | 五月天六月婷 | 四虎成人av | 99免费视频| 蜜臀av免费一区二区三区 | 国产精品久久网站 | 免费在线观看日韩 | 国产视频每日更新 | 五月天六月婷 | 国产精品毛片一区二区三区 | 最近最新中文字幕视频 | 免费视频网 | 日韩午夜大片 | 日日干美女 | 中文字幕一区二区三区在线观看 | 激情丁香婷婷 | 亚州人成在线播放 | 日日夜夜免费精品 | 国产97在线视频 | 国产精品视频免费看 | 欧美一区二区在线免费观看 | 在线观看的a站 | 国产大片免费久久 | 欧美在线视频免费 | 香蕉视频免费看 | 国产一级精品在线观看 | 婷婷亚洲五月 | 中文字幕国语官网在线视频 | 亚洲高清在线 | 在线你懂的视频 | 精品亚洲二区 | 人人看人人草 | 热久久视久久精品18亚洲精品 | 欧美男男激情videos | 欧美日韩另类视频 | 四虎永久国产精品 | 在线播放国产一区二区三区 | 久久成人视屏 | 免费 在线 中文 日本 | 黄色tv视频 | 国产高清成人 | 碰碰影院| 久久手机在线视频 | 国内丰满少妇猛烈精品播 | 国产美女在线免费观看 | 天无日天天操天天干 | 黄色福利视频网站 | 欧美看片 | 美女福利视频一区二区 | 91丝袜美腿 | 精品毛片久久久久久 | 黄色午夜 | 狠狠色噜噜狠狠狠狠 | 精品黄色在线 | 国产高清永久免费 | 中文字幕日韩国产 | 国产精品久久久久aaaa九色 | 天天拍天天色 | 国产二区av | 欧美一级黄大片 | 亚洲狠狠| 国产成人精品综合久久久 | 狠狠色狠狠色综合日日小说 | 中文字幕一区二区三区在线观看 | 日韩欧美91 | 亚洲综合在线一区二区三区 | 精品一区二区三区香蕉蜜桃 | 久久精品一区二区三区视频 | 美女视频黄免费 | 日韩欧美一区二区在线 | 久久久久久久久久伊人 | 天天艹天天| 久久婷婷精品视频 | 丁香六月婷 | 国产成a人亚洲精v品在线观看 | 亚洲经典中文字幕 | 欧美久久综合 | 精品国产一区二区在线 | 成人久久久久久久久 | 亚洲高清色综合 | 亚洲午夜小视频 | 国产伦精品一区二区三区四区视频 | 欧美成人69av | 久久精品爱视频 | 欧美性色综合网站 | 午夜精品中文字幕 | 最新av电影网站 | 成人av视屏 | 国产一级a毛片视频爆浆 | 丁香六月久久综合狠狠色 | www.香蕉视频在线观看 | 天堂激情网 | 人人爱在线视频 | 日韩精品中文字幕久久臀 | 欧美 亚洲 另类 激情 另类 | 日韩av一区在线观看 | 久久国产免费 | 午夜av不卡| 久久男人中文字幕资源站 | 亚洲经典视频在线观看 | 夜夜天天干 | 欧美精品成人在线 | 亚洲资源 | 久久99在线| 肉色欧美久久久久久久免费看 | 久久综合久久八八 | 天天做天天爱夜夜爽 | 91麻豆精品国产91久久久无限制版 | 久久激情久久 | 国产精品原创 | 亚洲激情婷婷 | 中文字幕高清免费日韩视频在线 | 国产精品久久一区二区三区, | 日韩在线视频免费看 | 久久精品一二三区 | 日韩xxxxxxxxx| 国产亚洲精品久久久久久无几年桃 | 欧美成人h版 | 中文在线天堂资源 | 国产亚洲免费观看 | 欧美一区二区三区不卡 | 国产一级大片在线观看 | 丁香亚洲 | 色综合天天色综合 | 国内久久精品视频 | 日韩中文久久 | 国产成人一区二区三区影院在线 | 五月婷婷欧美视频 | 国产精品99久久久久久武松影视 | 欧美日韩高清在线观看 | 91看片在线看片 | 国产123区在线观看 国产精品麻豆91 | 国产91对白在线播 | 日精品在线观看 | 日韩在线播放欧美字幕 | 亚洲va欧美va| 国产1区2区3区在线 亚洲自拍偷拍色图 | 亚洲jizzjizz日本少妇 | 久久人人看 | 超碰个人在线 | 中文字幕大全 | 超碰公开在线 | 亚洲天堂网在线观看视频 | 国产在线视频不卡 | 国精产品一二三线999 | 亚洲免费a | 久久免费精品一区二区三区 | 日韩精品久久久久久久电影竹菊 | 欧美另类激情 | 国产成人三级在线播放 | 久久黄色小说 | 久久国色夜色精品国产 | 国产 精品 资源 | 日本黄色a级大片 | 精品美女在线观看 | 天天视频色 | 九九九热精品 | 最近在线中文字幕 | 久久精品99国产 | 丰满少妇高潮在线观看 | 99在线精品免费视频九九视 | 在线观看一区二区视频 | 久久精品免视看 | 久久精品国产免费 | 欧美韩国日本在线观看 | 亚洲一区动漫 | 美女黄频在线观看 | 久久久免费观看完整版 | 国产成人精品免费在线观看 | 国产高清永久免费 | 天天干天天草天天爽 | 久久综合免费视频 | 久久精品免费电影 | 激情小说久久 | 精品在线观看一区二区 | 国产一区二区三区久久久 | 欧美ⅹxxxxxx | 91色亚洲 | 在线观看91av| 亚洲免费观看在线视频 | 亚洲伦理一区二区 | 人人干人人模 | 色国产精品 | 丝袜美女在线观看 | 91在线视频在线观看 | 96视频在线 | 一区二区在线电影 | 99成人免费视频 | 日本精a在线观看 | 国产精品久久久久一区二区 | 国产视频不卡 | 婷婷看片| 国产中文自拍 | 一本一道波多野毛片中文在线 | 综合铜03 | 最近日韩中文字幕中文 | 综合在线观看 | 超碰在线资源 | 欧美日韩aa | 亚洲精品视频播放 | 中文字幕日韩一区二区三区不卡 | 在线观看国产永久免费视频 | 久久av影视 | 久久国产精品第一页 | 在线观看免费91 | 成人黄色电影免费观看 | 久久久久久久久久免费 | 热久久99这里有精品 | 女人魂免费观看 | 美女网站在线观看 | 成人av中文字幕在线观看 | 成人在线播放网站 | 久久免费视频在线观看6 | 伊人va| 久久久国产精品久久久 | 久久久免费国产 | 一区二区三区高清不卡 | 久久不射网站 | 免费大片av | 免费看毛片在线 | 国产艹b视频 | 天天操天天干天天干 | 成人av中文字幕在线观看 | 久久av一区二区三区亚洲 | 中文字幕一区二区三 | 国产精品久久久久久久久久不蜜月 | 成人小视频在线观看免费 | 99热手机在线观看 | 日韩视频 一区 | 国产高清综合 | 色婷婷成人 | 国产传媒一区在线 | 五月激情姐姐 | 国产成人三级 | 97精品超碰一区二区三区 | 亚洲精品午夜久久久 | adc在线观看 | 国产精品99久久99久久久二8 | 久久久免费在线观看 | 国产亚洲人成网站在线观看 | 久久久99精品免费观看app | 国产一区国产二区在线观看 | 国产丝袜一区二区三区 | 久久久久国产视频 | 99视频免费 | v片在线看 | 中文字幕免费在线 | 亚洲电影成人 | 麻豆国产精品va在线观看不卡 | 97视频免费看 | 亚洲欧洲在线视频 | 中文字幕超清在线免费 | 国产综合香蕉五月婷在线 | 亚洲精品自在在线观看 | 国产精品91一区 | 久久高清国产视频 | 日韩精品久久中文字幕 | 91在线看 | 欧美日韩国内在线 | 91经典在线| 好看的国产精品视频 | 久久成人国产精品免费软件 | 久久成人精品视频 | 极品国产91在线网站 | 最近日本韩国中文字幕 | 国产精品麻豆果冻传媒在线播放 | 久久久 精品 | 99在线精品视频观看 | 十八岁以下禁止观看的1000个网站 | 日本黄色一级电影 | 成人av电影免费 | 激情视频区| 精品在线观看一区二区三区 | 色中文字幕在线观看 | 91国内在线视频 | 欧美性黑人| aaawww| 丁香婷婷基地 | 一级片免费观看 | 日韩不卡高清 | 五月天伊人网 | 久久精品99国产精品 | 日韩在线免费观看视频 | 人人爽人人爽人人 | 特级毛片网站 | 一二区精品 | 天天操天天操天天爽 | 国产99中文字幕 | 丁香六月婷婷开心婷婷网 | 国产精品6 | 日韩欧美v | 天天色影院 | 国产精品大片 | 狠狠躁日日躁狂躁夜夜躁 | 少妇性色午夜淫片aaaze | 欧美极度另类性三渗透 | 手机色站 | 亚洲国产播放 | 亚洲 欧美变态 另类 综合 | 在线免费精品视频 | 91新人在线观看 | 午夜久久久久久久 | av福利网址导航 | 国产精品久久久网站 | 国产成人在线播放 | 黄色三级在线看 | 91自拍视频在线观看 | 亚洲精品国产精品乱码不99热 | 久久久久久久久久久久久久电影 | 在线观看国产高清视频 | 久久久亚洲网站 | 欧美激情精品久久久久久免费 | 国产精品系列在线 | 在线一二三四区 | 日日草夜夜操 | 天天色综合三 | 久久这里只有精品久久 | 91人人爽久久涩噜噜噜 | 欧美久久久一区二区三区 | 亚洲精品久久久久www | 日韩在线精品一区 | 亚洲理论在线观看电影 | 99视频在线精品国自产拍免费观看 | 在线日韩中文 | 深夜福利视频在线观看 | 国产在线精品国自产拍影院 | 久久视频免费在线观看 | 国产一区在线播放 | 国产在线日本 | 日韩在线免费视频观看 | 国内视频一区二区 | 超碰在97| 国产亚洲成人网 | 久久不卡国产精品一区二区 | 国产一区二区三区四区在线 | 成人免费中文字幕 | 日日天天狠狠 | 高清美女视频 | 91正在播放 | 丁香综合av | 久久精品99国产精品 | 婷婷深爱 | 亚洲影音先锋 | 天天干夜夜夜操天 | 国产精品99久久久久久有的能看 | 国产精品一区专区欧美日韩 | 91欧美在线| 欧美精品你懂的 | 五月婷激情 | 99re8这里有精品热视频免费 | 成+人+色综合 | 97视频亚洲 | 国产三级视频在线 | 免费又黄又爽 | www色com| 成人免费一区二区三区在线观看 | 久久国产美女 | 人人爽人人片 | 91精品视频在线免费观看 | 日韩在线视频线视频免费网站 | 亚洲va在线va天堂 | 久久综合狠狠狠色97 | 欧美日韩一区二区在线观看 | 欧美一区二区在线刺激视频 | 日韩免费视频一区二区 | 黄网站色欧美视频 | 久草在线这里只有精品 | 日本性xxxxx| 亚洲视频综合 | 国产精品欧美一区二区三区不卡 | 中文字幕123区 | 亚洲精品在线免费观看视频 | 久久视频免费观看 | 97电影手机 | 不卡的av在线 | 国产五月婷婷 | 极品久久久 | 五月综合色婷婷 | 日韩成人精品在线观看 | 国产精品99精品久久免费 | 亚洲美女精品 | 欧美性天天 | 欧洲精品在线视频 | 麻豆超碰| 波多野结衣在线观看一区二区三区 | 久久综合婷婷综合 | 久草视频免费在线观看 | 日韩免费一二三区 | 日韩欧美视频一区二区 | 婷婷视频在线播放 | 草莓视频在线观看免费观看 | 免费电影播放 | 国产精品久久久久久久久久久久久久 | 国产中文字幕在线播放 | 亚洲国产中文在线 | 日韩精品久久一区二区三区 | 国产午夜精品一区二区三区四区 | 欧美日韩精品在线观看视频 | 人人看人人爱 | 日本久久成人中文字幕电影 | 天天操天天操天天操 | 93久久精品日日躁夜夜躁欧美 | 日韩av中文在线 | 国产精品一区二区av影院萌芽 | 狠狠干狠狠艹 | 欧美精品二区 | 日本在线视频一区二区三区 | 国产一级不卡毛片 | 欧美视频xxx | 人人狠狠综合久久亚洲婷 | 成全免费观看视频 | 亚洲码国产日韩欧美高潮在线播放 | 九色精品在线 | 97超碰中文字幕 | 国产视频一区在线免费观看 | 久久亚洲免费 | 一区在线观看 | 特级西西444www大胆高清无视频 | 欧美日本一二三 | 正在播放 国产精品 | 国产精品女视频 | 国产精品99久久久精品免费观看 | 亚洲视频免费在线观看 | 日本黄色免费网站 | 在线观看91精品视频 | 免费观看完整版无人区 | 久久久国产精品视频 | av在线播放免费 | 在线观看日韩精品 | 国产精品美女久久久久久2018 | 免费高清看电视网站 | 日韩在线一级 | 操操操日日日干干干 | 欧美久久综合 | 亚洲综合欧美日韩狠狠色 | 欧美日韩亚洲第一页 | 国产一区二区三区视频在线 | 99精品国产aⅴ | 久久精品国亚洲 | 精品亚洲免费 | 91在线精品播放 | 国产一区二区在线观看视频 | a黄色大片| 国产精品永久久久久久久www | 国产成人精品一区二区在线观看 | 在线观看中文字幕一区二区 | 欧美少妇bbwhd | 色在线最新| 亚洲欧洲日韩在线观看 | 婷婷国产一区二区三区 | 在线日本看片免费人成视久网 | 国产精品视屏 | 美女啪啪图片 | 国产精品午夜在线 | 91香蕉亚洲精品 | 国产视频一级 | 综合色天天 | 国产精品久久久久久久久搜平片 | 麻豆视频在线 | 日韩在线免费 | 成人动漫一区二区 | 日韩视频一 | 国产资源在线观看 | 久久草网站 | av免费观看高清 | 人人插人人草 | 91手机视频在线 | 中文字幕在线观看完整版 | 天天综合入口 | 久久永久免费 | 亚洲国产午夜精品 | 99亚洲精品 | 天操夜夜操| 国产精品黄色影片导航在线观看 | 在线日韩一区 | 欧美日韩国产一二三区 | 成人av在线直播 | 国产精品久久久电影 | 天天操人人干 | 色综合天| 天天射成人 | 久久久www成人免费精品 | 国产亚洲精品久久久久久久久久久久 | 国产99久久久国产精品 | 91免费在线看片 | 免费a v在线| 国产精品视屏 | 日本精油按摩3 | 精品久久国产一区 | 不卡的av在线播放 | 97视频久久久 | 亚洲视频,欧洲视频 | 成人亚洲欧美 | 色网站在线免费 | av一级一片 | 在线观看色视频 | 欧美 亚洲 另类 激情 另类 | 亚洲免费成人 | 色老板在线视频 | 色婷婷亚洲综合 | 色噜噜狠狠狠狠色综合久不 | 激情深爱| 69国产在线观看 | 91精品久久久久久久91蜜桃 | 日韩在线观看一区二区三区 | 在线免费高清一区二区三区 | 日本色小说视频 | 免费在线观看不卡av | 国产精品嫩草在线 | 日韩欧美有码在线 | 国产三级精品三级在线观看 | 国产欧美精品一区二区三区四区 | 免费av观看 | 永久精品视频 | 插插插色综合 | 美女免费网视频 | 中文字幕欧美三区 | 成人一区影院 | 日韩中文字幕视频在线 | 国产精品96久久久久久吹潮 | 免费看一级黄色 | 亚洲黄色成人网 | 国产精品乱码高清在线看 | 911国产精品 | 精品日韩中文字幕 | 日韩在线视频免费看 | 麻豆久久久 | 女人18精品一区二区三区 | 超碰人人草人人 | 日本婷婷色 | 成人免费视频播放 | 国产一二三区在线观看 | 99精品视频免费观看视频 | 午夜精品久久久久久久久久 | av.com在线| 国产福利精品视频 | 一区二区视频在线观看免费 | 欧美亚洲国产精品久久高清浪潮 | 国产精品涩涩屋www在线观看 | 欧美精品久久久久久久久老牛影院 | 欧美午夜久久久 | 天天操天天摸天天干 | 国内视频| 人人玩人人爽 | 亚洲视频一区二区三区在线观看 | 麻豆影视在线播放 | 国产高清视频在线免费观看 | 狠狠色狠狠色综合日日小说 | 手机成人在线 | 亚洲另类久久 | 99久久精品国产网站 | 在线观看免费高清视频大全追剧 | 在线观看视频一区二区三区 | 国产精品扒开做爽爽的视频 | 日韩免费大片 | 婷婷www | 日韩中文字幕视频在线 | 99久久综合狠狠综合久久 | 亚洲成人一区 | 丁香六月av| 99性视频| 国产一区国产精品 | 黄色www| 亚洲天天看 | 91av片| 日韩专区av | 97色在线观看免费视频 | 免费高清在线观看电视网站 | 在线观看免费福利 | 亚洲日本va在线观看 | 国产黄色大片免费看 | 狠狠干婷婷 | 国产淫片免费看 | 午夜视频欧美 | 久久久久久久国产精品视频 | 99色网站 | 成年人电影毛片 | 人人澡澡人人 | 99久久久久国产精品免费 | 国产精品一级视频 | 国产手机在线 | www.国产视频 | 色综合久久久久久中文网 | 三级av在线免费观看 | 婷婷色在线播放 | 久在线观看视频 | 国产日韩欧美在线免费观看 | 欧美国产日韩在线视频 | 91片黄在线观看 | 免费看av在线| 天天综合天天综合 | 欧美午夜精品久久久久久浪潮 | 亚洲精品视频在线观看免费视频 | 亚洲精品小视频 | 男女啪啪视屏 | av网站免费在线 | 丁香五婷 | 国产精品成人自产拍在线观看 | 日本中文字幕高清 | 五月开心激情网 | 97av超碰| 日日添夜夜添 | 美女网站免费福利视频 | 色多视频在线观看 | 久久夜色网 | 国产又粗又猛又色又黄网站 | 日本久久久久 | 欧美色一色| 国产精品中文字幕av | 免费网站看v片在线a | 在线观看免费黄视频 | 国产精品久久在线观看 | 一区二区亚洲精品 | 一区二区三区中文字幕在线观看 | 91传媒视频在线观看 | 天天做天天射 | 欧美性高跟鞋xxxxhd | 天天干天天射天天操 | 四虎影视久久久 | 性色视频在线 | 午夜日b视频 | 欧美日韩高清 | 日韩伦理一区二区三区av在线 | 91av社区 | 日韩va亚洲va欧美va久久 | 日韩黄色在线 | 久久精品国产第一区二区三区 | 国产精品毛片一区视频 | 不卡av电影在线观看 | 色综合久久综合 | 国产91免费看| 精品国产一区二区三区四区在线观看 | 日韩中文幕 | 伊人久久五月天 | 五月天av在线| 精品亚洲在线 | 免费的黄色的网站 | 国内外成人在线 | 欧美精品v国产精品 | 国产视频不卡一区 | 日本久久久亚洲精品 | 国产麻豆精品免费视频 | 亚洲精品h | 成 人 免费 黄 色 视频 | 欧美一级淫片videoshd | 一区久久久 | 日日干精品 | 色a网 | 国产一二三在线视频 | 国产毛片久久 | 99精品视频在线观看播放 | 国产成人精品午夜在线播放 | 久久人人爽人人片 | 在线观看黄色的网站 | 亚洲黄色app | 天天爽天天爽天天爽 | 青青草国产成人99久久 | 波多野结衣视频网址 | 激情伊人五月天 | 免费在线观看的av网站 | 午夜精品视频一区 | 在线观看亚洲精品 | 色干干| 97人人艹| 五月天婷婷在线观看视频 | adn—256中文在线观看 | 三级视频日韩 | 久久久国产精品成人免费 | www.五月天激情 | 久久草视频 | 又长又大又黑又粗欧美 | 天天插天天操天天干 | www久久99 | 涩涩网站在线播放 | 久久久亚洲精品 | 亚洲做受高潮欧美裸体 | 人人舔人人射 | 开心激情婷婷 | 日本特黄一级 | 亚洲视屏一区 | www.久热| 色婷婷国产在线 | 中文字幕中文字幕在线一区 | 日韩一级电影在线观看 | 午夜精品电影 | 成人一级免费视频 | 超碰97久久| 91看片黄色| 成全在线视频免费观看 | 一区二区三区精品在线视频 | 欧美成人h版电影 | 国内精品久久久久久久久久久 | 久久成年人视频 | 337p西西人体大胆瓣开下部 | 伊人亚洲综合 | 最新日韩在线观看视频 | 一区二区视频在线免费观看 | 国产原创在线 | 中文区中文字幕免费看 | 黄网av在线 | 99在线视频播放 | 久久国产精品视频 | 99产精品成人啪免费网站 | 91欧美日韩国产 | 亚洲一区二区三区在线看 | 亚洲综合色播 | 国产免费久久av | 五月天最新网址 | 亚洲1区 在线 | 人人爽人人爽 | 久久黄色网址 | 91麻豆文化传媒在线观看 | 99精品亚洲| 欧美在线资源 | 色婷婷五| 豆豆色资源网xfplay | 中文字幕一区二区三区在线视频 | 九草在线视频 | 国产 一区二区三区 在线 | 99精品视频免费看 | 午夜精品久久久久久久久久久久久久 | 国产精品69久久久久 | 色婷婷狠狠五月综合天色拍 | 九色精品免费永久在线 | 色婷婷成人网 | 国产亚洲精品久久久久久 | 欧美成人黄色 | 欧美日韩视频在线一区 | 国产日韩欧美在线一区 | 韩国一区二区三区在线观看 | 精品久久久久久久久久久久 | 免费一级片在线 | 免费国产一区二区 | 亚洲精品视频在线观看免费 | 亚洲理论电影网 | 免费黄色av电影 | 久久免费高清 | 日韩在线观看你懂得 | 色狠狠干 | 在线视频欧美日韩 | 在线中文字母电影观看 | 999在线精品 | 日韩高清在线一区二区 | 美女啪啪图片 | 色综合久久久久久久 | 国产视频中文字幕在线观看 | 91人人在线| 韩国在线视频一区 | av在线a | 精品1区二区 | 国内精品久久影院 | 久久国语 | 国产精品免费久久久久 | 国产婷婷视频在线 | 黄色一级免费网站 | 国产一区二区在线观看视频 | 久久99久久99精品免观看粉嫩 | 国产理论免费 | 久久经典国产 | 国产手机在线观看视频 | 国产精品国产亚洲精品看不卡 | 亚洲 欧美 综合 在线 精品 | 麻豆视频在线免费 | 国产色在线视频 | 国产玖玖在线 | 超碰在线观看99 | 久久精品视频在线观看免费 | 天天干天天草天天爽 | 国产黄色片久久 | 亚洲国产69 | 欧美精品一区二区三区一线天视频 | www黄色com| 狠狠狠色丁香婷婷综合久久88 | 成人黄色片在线播放 |