void inline reduce_min( const std::vector<cv::Mat_<float> >& scores, const std::vector<cv::Mat_<int> > d_xs, const std::vector<cv::Mat_<int> > d_ys, const std::vector<float>& weights, cv::Mat& score, cv::Mat_<int>& d_x, cv::Mat_<int>& d_y) { score = cv::Mat::zeros(scores[0].size(), cv::DataType<float>::type); d_x = cv::Mat::zeros(scores[0].size(), cv::DataType<int>::type); d_y = cv::Mat::zeros(scores[0].size(), cv::DataType<int>::type); for(int x = 0; x < score.cols; ++x) { for(int y = 0; y < score.rows; ++y) { const cv::Point p(x,y); int min_index = get_min_index(scores, p, weights); score.at<float>(p) = scores[min_index].at<float>(p) + weights[min_index]; d_x.at<int>(p) = d_xs[min_index].at<int>(p); d_y.at<int>(p) = d_ys[min_index].at<int>(p); } } }
void selection_sort(int * array, int size) { for ( int i = 0 ; i < size ; i++ ) { swap_int(&array[i], &array[get_min_index(array+i, size-i) + i]); } }