| 3306 | |
| 3307 | |
| 3308 | CV_IMPL void |
| 3309 | cvProjectPCA( const CvArr* data_arr, const CvArr* avg_arr, |
| 3310 | const CvArr* eigenvects, CvArr* result_arr ) |
| 3311 | { |
| 3312 | cv::Mat data = cv::cvarrToMat(data_arr), mean = cv::cvarrToMat(avg_arr); |
| 3313 | cv::Mat evects = cv::cvarrToMat(eigenvects), dst0 = cv::cvarrToMat(result_arr), dst = dst0; |
| 3314 | |
| 3315 | cv::PCA pca; |
| 3316 | pca.mean = mean; |
| 3317 | int n; |
| 3318 | if( mean.rows == 1 ) |
| 3319 | { |
| 3320 | CV_Assert(dst.cols <= evects.rows && dst.rows == data.rows); |
| 3321 | n = dst.cols; |
| 3322 | } |
| 3323 | else |
| 3324 | { |
| 3325 | CV_Assert(dst.rows <= evects.rows && dst.cols == data.cols); |
| 3326 | n = dst.rows; |
| 3327 | } |
| 3328 | pca.eigenvectors = evects.rowRange(0, n); |
| 3329 | |
| 3330 | cv::Mat result = pca.project(data); |
| 3331 | if( result.cols != dst.cols ) |
| 3332 | result = result.reshape(1, 1); |
| 3333 | result.convertTo(dst, dst.type()); |
| 3334 | |
| 3335 | CV_Assert(dst0.data == dst.data); |
| 3336 | } |
| 3337 | |
| 3338 | |
| 3339 | CV_IMPL void |