Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 646новых вакансий за сутки·91 617вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 156
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 103
  • Облачные технологии14 065
  • QA вакансии3 459
  • Backend вакансии2 078
  • Инженер данных1 789
  • Продакт-менеджер1 243

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии973
  • AI вакансии948
  • Frontend вакансии736
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 542
  • Node.js2 017
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP682
  • C++570

DevOps и инфраструктура

  • Kubernetes7 759
  • DevOps вакансии6 051
  • Linux-инфраструктура5 491
  • Terraform / IaC4 259
  • CI/CD3 239
  • Мониторинг и Observability1 782
  • SRE561
  • Кибербезопасность450

Аналитика и данные

  • Data Scientist1 124
  • Бизнес-аналитик922
  • Аналитик данных837
  • Системный аналитик154

Другие направления

  • Проджект-менеджер610
  • UI/UX дизайн143
  • Ручное тестирование14

По регионам

  • Вакансии в США43 172
  • Вакансии в Европе23 542
  • Вакансии в Канаде4 358
  • Работа в России3 909

По формату

  • Удалённые вакансии72 938
  • Релокация в США43 172
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии41 839
  • Middle вакансии20 268
  • Junior вакансии6 588

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме OpenCVВсе вопросы
OpenCVMiddleАлгоритмы

В чём разница между cv2.Canny() и детектированием границ по Sobel/Laplacian?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Sobel/Laplacian — базовые операторы градиента (одна свёртка). Canny — многоэтапный алгоритм: размытие → Sobel → NMS → двойной порог → трассировка рёбер. Canny даёт тонкие связные рёбра; Sobel/Laplacian — сырую карту градиента.

Рабочий пример

import cv2 as cv
import numpy as np

img = cv.imread("scene.jpg")
if img is None:
    raise FileNotFoundError("scene.jpg")
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

# --- Sobel ---
# ksize должен быть нечётным: 1, 3, 5, 7
sobel_x = cv.Sobel(gray, cv.CV_64F, 1, 0, ksize=3)  # градиент по X
sobel_y = cv.Sobel(gray, cv.CV_64F, 0, 1, ksize=3)  # градиент по Y
magnitude = cv.magnitude(sobel_x, sobel_y)            # амплитуда (float64)
# Для отображения — нормализуем в uint8
sobel_vis = cv.normalize(magnitude, None, 0, 255, cv.NORM_MINMAX, cv.CV_8U)
print("Sobel shape:", sobel_vis.shape, "dtype:", sobel_vis.dtype)
# (H, W), uint8

# --- Laplacian ---
# Рекомендуем размытие перед лапласианом
blurred = cv.GaussianBlur(gray, (5, 5), 0)
laplacian = cv.Laplacian(blurred, cv.CV_64F)    # float64, содержит отрицательные значения
laplacian_abs = np.uint8(np.absolute(laplacian)) # берём модуль
print("Laplacian shape:", laplacian_abs.shape)   # (H, W)

# --- Canny ---
# Правило: threshold2 ≈ 2–3× threshold1
canny = cv.Canny(gray, threshold1=50, threshold2=150)
# dtype=uint8, значения строго 0 или 255
print("Canny shape:", canny.shape, "dtype:", canny.dtype)  # (H, W), uint8

# Canny с явным ядром Гаусса (apertureSize — размер Sobel внутри Canny)
canny_fine = cv.Canny(gray, 30, 100, apertureSize=5, L2gradient=True)

# Сравнение плотности рёбер
print(f"Sobel fg: {np.count_nonzero(sobel_vis > 50):6d} пикс.")
print(f"Canny fg: {np.count_nonzero(canny):6d} пикс.")  # обычно меньше, рёбра тоньше

Алгоритмическая разница

Sobel вычисляет градиент по X и Y через свёртку с ядром 3×3 (или 5×5, 7×7). Результат — карта амплитуды градиента: толстые и шумные рёбра, float-значения.

Laplacian — вторая производная (лапласиан): чувствителен к шуму, реагирует на оба края перехода, результат может быть отрицательным. Перед применением нужно размытие.

Canny — многоэтапный детектор (1986):

  1. Gaussian blur — подавление шума
  2. Sobel — вычисление градиента по X и Y
  3. Non-maximum suppression (NMS) — утончение рёбер до 1 пикселя
  4. Double threshold — два порога: threshold1 (слабые рёбра) и threshold2 (сильные рёбра)
  5. Edge tracking by hysteresis — слабые рёбра включаются, только если связаны с сильными
Результат: тонкие, связные, бинарные рёбра — идеал для контурного анализа.

Когда что использовать

Canny — стандарт для большинства задач: поиск контуров, предобработка перед findContours, Hough-преобразование. Даёт чистые тонкие рёбра.

Sobel — когда нужна не бинарная маска, а вещественная карта градиента: оценка резкости изображения, текстурные признаки, directional edge detection.

Laplacian — тест на резкость (Laplacian variance), обнаружение blob-структур, иногда в составе LoG (Laplacian of Gaussian) для SIFT-подобных дескрипторов.

Подводные камни

  • Sobel с ddepth=cv.CV_8U обрезает отрицательные значения (рёбра на переходе тёмный→светлый пропадают). Всегда используйте CV_64F или CV_16S, затем берите модуль.
  • Laplacian без размытия усиливает шум — получите «снег» вместо рёбер. Всегда делайте GaussianBlur перед Laplacian.
  • Неправильное соотношение порогов Canny: если threshold1 ≈ threshold2, гистерезис не работает — рёбра будут прерывистыми. Рекомендованное соотношение 1:2 или 1:3.
  • Canny принимает только uint8: если передать float32 или float64 — cv2.error. Конвертируйте заранее.
  • Sobel с ksize=1 использует ядро Шарра (3-точечное), не стандартный Sobel — результаты могут удивить.
  • Canny на цветном изображении: надо конвертировать в grayscale вручную. Canny не принимает 3-канальный массив.
  • Параметры Canny зависят от масштаба: одни и те же пороги дадут разные результаты на изображениях разного разрешения. Для робастности используйте автоматический выбор порогов (метод Отцу как стартовая точка).

Частые вопросы на собеседовании

  • Что такое пороговая обработка (thresholding) в OpenCV и каковы её типы (binary, Otsu, adaptive)?
  • Что такое OpenCV и каковы его основные области применения?
  • Как преобразовать цветное изображение в оттенки серого в OpenCV?
  • В каких data/AI-задачах OpenCV даёт реальный выигрыш, а где лучше выбрать другой инструмент или более простой pipeline?

Типичные ошибки

  • Объяснять canny vs sobel laplacian только синтаксисом без shape, dtype, состояния или режима выполнения.
  • Игнорировать leakage, воспроизводимость, пустые входы и скрытые копии данных.
  • Не проверять production-симптомы: latency, память, ретраи, дрейф качества и несовпадение версий.

Что проверяет интервьюер

  • Может ли связать canny vs sobel laplacian с реальным контрактом входов и выходов.
  • Упоминает ли тесты, метрики, reproducibility и диагностику ошибок.
  • Видит ли различие между demo-кодом в ноутбуке и production-пайплайном.

Как вы знаете этот вопрос?

Проверить себя по теме OpenCV →

Источники

  • https://docs.opencv.org/4.x/da/d22/tutorial_py_canny.html

Связанные темы

OpenCVdata-aidata-processingperformance-debugging