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

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

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

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

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

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

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

Что значит *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++) ...

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

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

4
0 / 0 / 0
Регистрация: 11.06.2021
Сообщений: 2
12.06.2021, 15:43 2
Здравствуйте, хотел бы у вас поинтересоваться - насколько этот код эффективен/точен для распознавания отпечатков пальцев? Просто я тоже использую данный подход из OpenCV blueprints, но хотелось бы ещё знать мнение человека, который уже опробовал описанную в книге технику.
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 415
14.06.2021, 22:18  [ТС] 3
Как и в случае с распознаванием лиц, чистое использование только методов OpenCV не эффективно. Точность крайне низкая. 50%
0
0 / 0 / 0
Регистрация: 11.06.2021
Сообщений: 2
14.06.2021, 23:52 4
А какие ещё, скажем, "надстройки" И методы можно использовать для улучшения результата?
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 415
14.07.2021, 23:29  [ТС] 5
Можно использовать Dlib. Результат отличный
0
14.07.2021, 23:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2021, 23:29
Помогаю со студенческими работами здесь

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

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

OpenCV. IplImage* cvCreateImage в Mat
Здравствуйте! Как написать то что IplImage, но через Mat? IplImage *dd =...

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

Дозапись в binary mat файл
Привет, заранее прошу прощение, если тема создана не там. Идея такова. Имеются постоянно...

Попытки считать данные из *.mat
Возможно ли считать данные через С++ из файла данных с расширением *.mat? Если да, то можно ли...


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

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