1281

Ответ на пост «5000 листиков»5

UPD: Корректные расчёты тут

В оригинальном посте утверждается, что на изображении 5000 листиков. Проверим-с!

Для ЛЛ: 5037 листиков

Для ЛЛ: 5000 листиков, ТС облажался

Настало время объединить лигу упоротых расчётов, лигу лени и лигу программистов и посчитать сколько же всего листиков в картинке!

На всякий случай та самая картинка

На всякий случай та самая картинка

Обратим внимание, что все листики более-менее одного цвета и каждый из них имеет чёрную рамку, которая сильно отличается от оригинального цвета.

Напишем простенький скрипт:

  • Проходим по всем пикселям

  • Если мы раньше смотрели на этот пиксель - переходим к следующему пикселю

  • Если цвет пикселя примерно совпадает с цветом листа, то увеличиваем счётчик листа и рекурсивно добавляем этот и все соседние пиксели цвета листа в список пикселей

В конце построим версию изображения только из листов чтобы визуально посмотреть не продолбалось ли что-то:

Вот так выглядит картинка только с листиками

Вот так выглядит картинка только с листиками

Полную версию скрипта на питоне можно найти тут.

Запускаем, ждём чуток и получаем 5036 листов. Добавим 1 желтый листик и получим финальный ответ:

5037

Это, конечно, больше 5000 обещаных :(

UPD: Там баг, корректные расчёты тут

Лига программистов

2.1K постов11.9K подписчика

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

156
Автор поста оценил этот комментарий
Под влиянием общественного давления кран был успешно заменён. Ура, товарищи!
Иллюстрация к комментарию
раскрыть ветку (1)
131
Автор поста оценил этот комментарий

Что только не сделаешь чтобы жена на пикабу не булила :(

показать ответы
2085
Автор поста оценил этот комментарий
ответный пост

Сегодня день, когда я обманул честный люд на Пикабу, оклеветал @ViKriGri, и заменил кран.

К сожалению, проводя подсчёт листов я допустил ошибку и не учёл случаи когда появляются диагональные пиксели, которые так же принадлежат одному листу :(

К счастью, @ZhykBafometovich перепроверил мои вычисления тут. Оказывается, листков ровно 5000 и @ViKriGri, была честна со всеми нами. Прости меня Пикабу!!

Здесь можно найти поправленную версию кода (там я ещё учёл что есть островки по 1 пикселю)

Прошу исключить меня из Лиги Упоротых расчётов - я подвел вас всех.

P.S.

В Лиге Программистов оставьте - баги это норма :D

комментарии (50)
263
Автор поста оценил этот комментарий

Восхищаюсь Вами, наркоман Вы упоротый!

раскрыть ветку (1)
34
Автор поста оценил этот комментарий

Благодарю!

показать ответы
6
Автор поста оценил этот комментарий
А если вручную пересчитать?
раскрыть ветку (1)
22
Автор поста оценил этот комментарий

Тогда меня совсем из Лиги Лени попрут(

показать ответы
8
Автор поста оценил этот комментарий
раскрыть ветку (1)
19
Автор поста оценил этот комментарий

О, я нашел ошибку, сейчас выпущу пост-опровежение :) Спасибо!

показать ответы
57
Автор поста оценил этот комментарий

Пиздеть не мешки ворочить, наркоман ебаный Простите, я проверил, все не так, 4999шт зеленых +1шт желый (его нет в файле, наркоман не засчитал)
файл дхф можете скачать по ссылке:
https://drive.google.com/file/d/1QloNOdvRHlb8eqNaRLtgskQutOG...

Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
9
Автор поста оценил этот комментарий

Файл не публичный, пошарь доступ

показать ответы
0
Автор поста оценил этот комментарий

Алгоритм некорректно сработает для данного дерева: некоторые листы пересекаются и будут засчитаны за один. Правильный ответ: 5909


код на питоне для подсчета:


import numpy as np

from PIL import Image

import cv2

from collections import deque


image_path = "yfordlrt.webp"

leaf_color = np.array([90, 170, 90]) # примерный цвет листа (в RGB)

color_tolerance = 40 # допуск на отклонение цвета


image = Image.open(image_path).convert("RGB")

image_np = np.array(image)

height, width, _ = image_np.shape

visited = np.zeros((height, width), dtype=bool)


def is_leaf_color(pixel):

return np.linalg.norm(pixel - leaf_color) < color_tolerance


def bfs(x, y):

queue = deque()

queue.append((x, y))

visited[y, x] = True

while queue:

cx, cy = queue.popleft()

for dx in [-1, 0, 1]:

for dy in [-1, 0, 1]:

nx, ny = cx + dx, cy + dy

if 0 <= nx < width and 0 <= ny < height and not visited[ny, nx]:

if is_leaf_color(image_np[ny, nx]):

visited[ny, nx] = True

queue.append((nx, ny))


leaf_count = 0

for y in range(height):

for x in range(width):

if not visited[y, x] and is_leaf_color(image_np[y, x]):

leaf_count += 1

bfs(x, y)


print(f"Количество листиков: {leaf_count}")


извините.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Есть примеры пересекающихся листов? Там у каждого черная рамочка есть, которая не даёт их посчитать за 1

5
Автор поста оценил этот комментарий
Некоторые листы идут внахлёст. Если я правильно понял кот, то вы их считаете как один.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

У каждого листа есть чёрная окантовка, так что листы внахлёст это не проблема. Я боялся, что будут листы которые делят другой лист пополам, но беглый осмотр таких листов не нашел

0
Автор поста оценил этот комментарий

Раскидать жидеднько и считать - приложение врало, неприемлемо. Задача: высыпать их коробки и отсчитывать, напр, по 28 ед. Или отсчитать 2120 ед. Или 560. Вроде просто: высыпал из хранилища, распределил кучку по бумаге, направил камеру и имеешь количество. Добавил (убавил) также, частями. Не получилось.

Объемы не большие. Скажем, нужно так посчитать (отобрать) 200-500 раз за сезон.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да вы пытаетесь решить решённые проблемы. Белый поиск по плейстору подсказал такое приложение https://play.google.com/store/apps/details?id=com.deepvision...

2000 тик-так конфет у меня нет, но с 10 справляется


https://play.google.com/store/apps/details?id=com.dyve.count...


Эти товарищи вроде даже под тебя могут темплейт подстроить


И ещё толпа подобных приложений



Они, конечно, не бесплатные, но если это реальная проблема - решений уйма

Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий

Так где баг и где правильно? Я как - то скачал приложение, которое считало объекты на фотографии. К примеру, зерна кофе (на самом деле коконы мегахил осмия бикорнис, но они похожи). Смартфон жутко грелся. В итоге ошибка (при неоднократном повторении) была больше 15 проц., неприемлимой. А ваша штука может любое изображение анализировать?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Продолжение поста «5000 листиков»

Тут поправил ошибку) Моя штука может анализировать только зеленые листики на нарисованном дереве))

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

Юриспруденция

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

Кино и сериалы

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества