Форум программистов, компьютерный форум, киберфорум
C++: OpenCV
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 24.12.2022
Сообщений: 13

В какую сторону мне стоит дальше изучать opencv, чтобы улучшить алгоритм?

24.09.2023, 00:58. Показов 7952. Ответов 1

Author24 — интернет-сервис помощи студентам
Здравствуйте, дали задачку на стажировку - найти спичечные коробки на фото и пометить их красной границей. Можно использовать opencv, stl, boost. Обязательно использование примитивов opencv. Подскажите, в какую сторону мне рыть, чтобы оптимизировать следующий код, дабы он выдавал более точное позиционирование коробков на фото?

C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
 
int main(int argc, char* argv[])
{
    Mat image = imread("C:\\Users\\79\\Desktop\\j1.jpg");
    Mat gray;
    cvtColor(image, gray, COLOR_BGR2GRAY);
    GaussianBlur(gray, gray, Size(5, 5), 0);
    Mat bin_gray;
    threshold(gray, bin_gray, 100, 255, THRESH_BINARY);
 
    vector<vector<Point>> contours;
    vector<Vec4i> hierarchy;
    findContours(bin_gray, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
 
    vector<vector<Point>> filtered_contours;
    double minCountourArea = 180.0;
    for (size_t i = 0; i < contours.size(); i++)
    {
        approxPolyDP(contours[i], contours[i], 4, true);
        
        if (contourArea(contours[i]) >= minCountourArea) 
        {
            filtered_contours.push_back(contours[i]);
        }
    }
 
    drawContours(image, filtered_contours, -1, Scalar(0, 0, 255), 2);
    
    imwrite("C:\\Users\\79\\Desktop\\result.jpg", image);
    
    imshow("Result", image);
 
    waitKey(0);
}
Результат, который я получил:
В какую сторону мне стоит дальше изучать opencv,  чтобы улучшить алгоритм?


Я понимаю, что в моем коде сейчас не достает проверок на существование загружаемого изображения, допилю их позже. Хотелось бы получить материалы, которые помогут мне более конкретно выделить спичечные коробки на фото. Сам в opencv неделю от силы, не стоит в целях сдать задачу вовремя и получить работу, сейчас задача разобраться в opencv на конкретных задачах.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2023, 00:58
Ответы с готовыми решениями:

Стоит ли дальше изучать X?
Или лучше заняться изучением GTK? И еще вопрос: есть ли в GTK функции для работы с мышью и клавиатурой? И можно ли обрабатывать одновремено...

Что мне изучать дальше?
помогите что мне изучать дальше, знаю только SmallBasic. P.S. Мне 13 лет

Что мне дальше изучать?
Привет. Прочитал основы HTML и CSS. Затем JavaScript и jQuery. Потом PHP и SQL. Написал 2 простеньких сайта: использовал всё...

1
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
26.09.2023, 00:33
OrangeVagon, вы же понимаете что в данный момент у вас выделяются не коробки, а контуры с площадью больше 180 единиц? И попадают сюда не только коробки, а и чиркаш коробка сбоку, и человечек на одном из коробков? В данный момент здесь нет никакого детектирования коробка. Начните с малого - вместо отсеивания контуров по площади отсеивать начните контуры, которые имеют в себе градусы 90+- 20 - у коробка в любом случае есть углы. Уберите размытие, на мой взгляд, оно лишнее, ну или хотя бы сравните с ним и без него десяток изображений. С бинаризацией я бы повременил, перевода изображения в серый одноканал достаточно для скорости на небольших изображениях, да и такого рода бинаризация, как я вижу, вредит - у вас контуры с большой площадью нашлись не все. В общем для начала переберите варианты подготовки изображения, что бы добиться нахождения 90-95% всех контуров. Потом фильтруйте по признакам присущим форме коробка, потом может и по площади фильтровать уже, но мне кажется это не нужно, будет скипать коробки, которые лежат далеко и из-за перспективы в кадре по площади малы
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2023, 00:33
Помогаю со студенческими работами здесь

Какую версию Delphi стоит изучать, и стоит ли вообще
Понимаю, вопрос задавался неоднократно, но прошу - не гоните мокрыми тряпками. мой вопрос довольно конкретен. Вообще задался целью...

Стоит ли вообще дальше изучать С++ или перейти на Java?
привет. многие начали изучать программирование с языка С++. поэтому я пошёл по этому же пути. начинал читать учебник Либерти, но потом...

Стоит ли самостоятельно изучать html, css, чтобы потом верстать сайты?
Здравствуйте! Стоит ли самостоятельно изучать html, css, чтобы потом верстать сайты? И где потом искать работу? или это малоприбыльно,...

Стоит ли мне изучать такую книгу - Пенни Орвик, Гай Смит "Разработка драйверов Windows Driver Foundation"?
Доброго дня вам? Подскажите мне пожалуйста, стоит ли мне изучать такую книгу - Пенни Орвик, Гай Смит &quot;Разработка драйверов...

как мне сделать так, чтобы LOGO и навигатор меню был расположен по левую сторону
.logo {position: absolute;top:0px;left:0px;text-indent:-9999px;} .logo-wrap {position:fixed;z-index: 20;} .logo a...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Списки и кортежи в Python: различия, особенности, применение
py-thonny 13.04.2025
Python славится своей гибкостью при работе с данными. В арсенале языка есть две основные последовательные структуры данных, которые программисты используют ежедневно — списки и кортежи. Эти структуры. . .
Middleware в ASP.NET Core
UnmanagedCoder 13.04.2025
В ASP. NET Core термин "middleware" занимает особое место. Что же это такое? Middleware представляет собой программные компоненты, которые формируют конвейер обработки HTTP-запросов в приложении. . . .
Таблицы лута в Unity с MinMaxCurve и AnimationCurve
GameUnited 12.04.2025
Создание сбалансированного лута в играх — задача не из простых. Разработчики постоянно ищут способы настройки систем выпадения предметов, которые будут одновременно справедливыми для игроков и. . .
std::expected в C++: Управление ошибками
bytestream 12.04.2025
Обработка ошибок всегда была важной и одновременно сложной задачей в программировании на C++. На протяжении долгого времени разработчики использовали различные подходы: возвращаемые коды ошибок,. . .
Nullable типы и операторы объединения null в C#
UnmanagedCoder 12.04.2025
Многие шутят, что null — это миллиардная ошибка в программировании. И в этой шутке только доля шутки. Тони Хоар, создатель null-ссылки, сам назвал её своей "ошибкой на миллиард долларов". Почему?. . .
Аутентификация и авторизация JWT в микросервисах с API Gateway
stackOverflow 12.04.2025
В традиционных монолитных приложениях безопасность часто реализуется как единый защитный периметр - пользователь проходит аутентификацию один раз, после чего получает доступ ко всем функциям системы. . . .
TypeScript: Интерфейсы vs Типы
run.dev 11.04.2025
Современная разработка на JavaScript сталкивается с множеством проблем при масштабировании проектов. Типизация кода стала хорошим инструментом, помогающим избежать ошибок во время выполнения,. . .
Управление топиками и разделами Kafka
Javaican 11.04.2025
Apache Kafka — распределенная платформа потоковой передачи данных, которая стала стандартом для построения высоконагруженных систем обмена сообщениями. В современной архитектуре микросервисов,. . .
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер