Exemple #1
0
void GridAdaptedFeatureDetector::detectImpl(const Mat& image, const Mat& mask,
        vector<KeyPoint> &keypoints) const {
    keypoints.clear();
    keypoints.reserve(maxTotalKeypoints);

    int maxPerCell = maxTotalKeypoints / (gridRows * gridCols);
    for (int i = 0; i < gridRows; ++i) {
        Range row_range((i * image.rows) / gridRows, ((i + 1)*image.rows) / gridRows);
        for (int j = 0; j < gridCols; ++j) {
            Range col_range((j * image.cols) / gridCols, ((j + 1)*image.cols) / gridCols);
            Mat sub_image = image(row_range, col_range);
            Mat sub_mask;
            if (!mask.empty()) {
                sub_mask = mask(row_range, col_range);
            }

            vector<KeyPoint> sub_keypoints;
            detector->detect(sub_image, sub_keypoints, sub_mask);
            keepStrongest(maxPerCell, sub_keypoints);
            for (std::vector<cv::KeyPoint>::iterator it = sub_keypoints.begin(), end = sub_keypoints.end();
                    it != end; ++it) {
                it->pt.x += col_range.start;
                it->pt.y += row_range.start;
            }

            keypoints.insert(keypoints.end(), sub_keypoints.begin(), sub_keypoints.end());
        }
    }
}
Exemple #2
0
worksheet::const_iterator worksheet::cbegin() const
{
    auto dimensions = calculate_dimension();
    cell_reference top_right(dimensions.get_bottom_right().get_column_index(), dimensions.get_top_left().get_row());
    range_reference row_range(dimensions.get_top_left(), top_right);
    
    return const_iterator(*this, row_range, major_order::row);
}