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

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

24.09.2023, 00:58. Показов 4086. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2023, 00:58
Ответы с готовыми решениями:

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

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

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

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

1
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
26.09.2023, 00:33 2
OrangeVagon, вы же понимаете что в данный момент у вас выделяются не коробки, а контуры с площадью больше 180 единиц? И попадают сюда не только коробки, а и чиркаш коробка сбоку, и человечек на одном из коробков? В данный момент здесь нет никакого детектирования коробка. Начните с малого - вместо отсеивания контуров по площади отсеивать начните контуры, которые имеют в себе градусы 90+- 20 - у коробка в любом случае есть углы. Уберите размытие, на мой взгляд, оно лишнее, ну или хотя бы сравните с ним и без него десяток изображений. С бинаризацией я бы повременил, перевода изображения в серый одноканал достаточно для скорости на небольших изображениях, да и такого рода бинаризация, как я вижу, вредит - у вас контуры с большой площадью нашлись не все. В общем для начала переберите варианты подготовки изображения, что бы добиться нахождения 90-95% всех контуров. Потом фильтруйте по признакам присущим форме коробка, потом может и по площади фильтровать уже, но мне кажется это не нужно, будет скипать коробки, которые лежат далеко и из-за перспективы в кадре по площади малы
1
26.09.2023, 00:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2023, 00:33
Помогаю со студенческими работами здесь

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

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

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

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

Начал изучать С. Хочу, чтобы мне объяснили подробно задачу(Заодно проверить на ошибки).Заранее спасибо!
Составить блок-схему алгоритма и программу вычисления суммы n членов ряда согласно условию задачи....

Изучаю Dеlphi. И еще какой язык мне надо изучать, чтобы я могу назвать себе программистом
Изучаю Dеlphi. И еще какой язык мне надо изучать, чтобы я могу назвать себе программистом и...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru