С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++: OpenCV
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/88: Рейтинг темы: голосов - 88, средняя оценка - 4.72
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 474

Запись cv::Mat в БД MySQL

26.05.2020, 23:55. Показов 18545. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую.

Вопрос следующий.

C++ (Qt)
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
cv::Mat ImageAnalyzer::GetDescriptors(cv::Mat InputImage)
{
    qWarning () << "Call Get Descriptors function";
 
    cv::Mat ImageEnchanced = ImagePrepare(InputImage);
    ImageEnchanced.convertTo(ImageEnchanced, CV_32SC1);
    RemoveHoles(50, ImageEnchanced);
    ImageEnchanced.convertTo(ImageEnchanced, CV_8UC1);
 
    cv::imwrite("/home/ortech/Desktop/TestFingerprintData/BinaryNoHoles.png",
            ImageEnchanced);
 
    //********************************************************************************************************
    // Now lets detect the strong minutiae using Haris corner detection
    cv::Mat harris_corners, harris_normalised;
    harris_corners = cv::Mat::zeros(ImageEnchanced.size(), CV_32FC1);
    cornerHarris(ImageEnchanced, harris_corners, 3, 3, 0.04, cv::BORDER_DEFAULT);
    normalize(harris_corners, harris_normalised, 0, 255, cv::NORM_MINMAX, CV_32FC1, cv::Mat());
 
    // Select the strongest corners that you want
    int threshold_harris = 120;
    std::vector<cv::KeyPoint> keypoints;
 
    // Make a color clone for visualisation purposes
 
    cv::Mat rescaled;
    convertScaleAbs(harris_normalised, rescaled);
    cv::Mat harris_c(rescaled.rows, rescaled.cols, CV_8UC3);
    cv::Mat in[] = { rescaled, rescaled, rescaled };
    int from_to[] = { 0,0, 1,1, 2,2 };
    mixChannels( in, 3, &harris_c, 1, from_to, 3 );
    for(int x=0; x<harris_normalised.cols; x++)
    {
        for(int y=0; y<harris_normalised.rows; y++)
        {
            if ( (int)harris_normalised.at<float>(y, x) > threshold_harris )
            {
                circle(harris_c, cv::Point(x, y), 1, cv::Scalar(0,0,255), 1);
                keypoints.push_back( cv::KeyPoint (x, y, 1) );
            }
        }
    }
 
    cv::imwrite("/home/ortech/Desktop/TestFingerprintData/4_KeyPoints.png",
        harris_c);
 
    //********************************************************************************************************
    qWarning() << "Calculate the ORB descriptor based on the keypoint";
    cv::Ptr<cv::Feature2D> orb_descriptor = cv::ORB::create();
    cv::Mat descriptors;
    orb_descriptor->compute(ImageEnchanced, keypoints, descriptors);
    //qWarning() << "Calculated value: " << orb_descriptor;
 
    return descriptors;
 
}
Это функция создания дескриптора для сравнения отпечатков пальцев.
Запускать ее всякий раз для каждого пальца в БД это очень долго.
Можно ли хранить результат ее работы в БД, то есть записать cv::Mat в blob БД MySQL?

Добавлено через 3 часа 45 минут
C++ (Qt)
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
QByteArray mat2ByteArray(const cv::Mat &image)
    {
        QByteArray byteArray;
        QDataStream stream( &byteArray, QIODevice::WriteOnly );
        stream << image.type();
        stream << image.rows;
        stream << image.cols;
        const size_t data_size = image.cols * image.rows * image.elemSize();
        QByteArray data = QByteArray::fromRawData( (const char*)image.ptr(), data_size );
        stream << data;
        return byteArray;
    }
 
    cv::Mat byteArray2Mat(const QByteArray & byteArray)
    {
        QDataStream stream(byteArray);
        int matType, rows, cols;
        QByteArray data;
        stream >> matType;
        stream >> rows;
        stream >> cols;
        stream >> data;
        cv::Mat mat( rows, cols, matType, (void*)data.data() );
        return mat.clone();
    }
все в bytearray и в БД и назад. Тема закрыта
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.05.2020, 23:55
Ответы с готовыми решениями:

Запись .mat файлов с использованием библиотек cs matio
Здравствуйте, люди! Помогите пожалуйста разобраться с одной проблемой. Пытаюсь записать двухмерный массив t типа double в матфайл используя...

Что значит *mat[y]?
int mat = {{1,2,3},{4,5,6},{7,8,9}}; int x = 0; int y; for(y = 0; y &lt;3; y++) x+=*mat; printf(&quot;%d&quot;,...

OpenCVSharp IplImage в Mat
Реализую медианную фильтрацию private void button1_Click(object sender, EventArgs e) { int size =...

4
0 / 0 / 0
Регистрация: 11.06.2021
Сообщений: 2
12.06.2021, 15:43
Здравствуйте, хотел бы у вас поинтересоваться - насколько этот код эффективен/точен для распознавания отпечатков пальцев? Просто я тоже использую данный подход из OpenCV blueprints, но хотелось бы ещё знать мнение человека, который уже опробовал описанную в книге технику.
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 474
14.06.2021, 22:18  [ТС]
Как и в случае с распознаванием лиц, чистое использование только методов OpenCV не эффективно. Точность крайне низкая. 50%
0
0 / 0 / 0
Регистрация: 11.06.2021
Сообщений: 2
14.06.2021, 23:52
А какие ещё, скажем, "надстройки" И методы можно использовать для улучшения результата?
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 474
14.07.2021, 23:29  [ТС]
Можно использовать Dlib. Результат отличный
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.07.2021, 23:29
Помогаю со студенческими работами здесь

Буфер из Mat opencv
Всем привет! В общем столкнулся с такой проблемой. Никак не могу создать буфер из картинок. Если кто знает как это сделать, помогите, буду...

Получить screenshot windows в cv::Mat
Собственно, название темы. Как? К сожалению, я не силен в графике и с соответствующими библиотеками знаком слабо. Думал использовать...

Преобразование кода из *.pas в *.mat
можно ли, и, если можно, то как, преобразовать код, написанный в Pascal ABC.NET в файл формата .mat? например, на примере это небольшой...

OpenCV. IplImage* cvCreateImage в Mat
Здравствуйте! Как написать то что IplImage, но через Mat? IplImage *dd = cvCreateImage(cvGetSize(img), img-&gt;depth, 1); в что-то...

Конвертирование .mat файлов в .xml
Добрый день. Надеюсь кто-то сможет пролить свет на мой вопрос. У меня есть файлы формата mat. Файлы содержат несколько переменных с данными...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru