373 std::visit([&seed](
const auto& p) {
374 using T = std::decay_t<
decltype(p)>;
375 if constexpr (std::is_same_v<T, std::monostate>) {
376 }
else if constexpr (std::is_same_v<T, ThresholdParams>) {
378 }
else if constexpr (std::is_same_v<T, ThresholdAdaptiveParams>) {
379 hash_combine(seed, std::hash<uint32_t> {}(p.block_size));
381 }
else if constexpr (std::is_same_v<T, NormalizeRangeParams>) {
384 }
else if constexpr (std::is_same_v<T, GaussianBlurParams>) {
386 }
else if constexpr (std::is_same_v<T, FilterSeparableParams>) {
387 for (
float v : p.kernel_x)
389 for (
float v : p.kernel_y)
391 }
else if constexpr (std::is_same_v<T, CannyParams>) {
393 hash_combine(seed, std::hash<float> {}(p.low_threshold));
394 hash_combine(seed, std::hash<float> {}(p.high_threshold));
395 }
else if constexpr (std::is_same_v<T, MorphParams>) {
397 }
else if constexpr (std::is_same_v<T, HarrisParams>) {
400 }
else if constexpr (std::is_same_v<T, ExtractPeaksParams>) {
402 hash_combine(seed, std::hash<uint32_t> {}(p.nms_radius));
403 }
else if constexpr (std::is_same_v<T, TrackKeypointsParams>) {
404 hash_combine(seed, std::hash<uint32_t> {}(p.window_radius));
405 hash_combine(seed, std::hash<uint32_t> {}(p.max_iterations));
406 hash_combine(seed, std::hash<float> {}(p.eigen_threshold));
407 hash_combine(seed, std::hash<float> {}(p.error_threshold));
408 }
else if constexpr (std::is_same_v<T, FindContoursParams>) {
410 hash_combine(seed, std::hash<uint32_t> {}(p.max_contours));
std::variant< std::monostate, ThresholdParams, ThresholdAdaptiveParams, NormalizeRangeParams, GaussianBlurParams, FilterSeparableParams, CannyParams, MorphParams, HarrisParams, ExtractPeaksParams, TrackKeypointsParams, ConnectedComponentsParams, FindContoursParams > VisionParams
Parameter variant covering all ops that carry parameters.