Russian Qt Forum
Ноябрь 25, 2024, 17:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Динамические массивы для хранения изображений  (Прочитано 11040 раз)
ShiroExorcist
Гость
« : Февраль 13, 2017, 22:01 »

Добрый вечер! При реализации задачи по обработке двух пар изображений разрешением 640х480 появилась необходимость увеличить поля изображение на половину матрицы свёртки, написал три простые функции для этого. Конечное монохромное изображение хранится в трёх динамических двумерных массивах. И вот возникла проблема при таком разрешении изображений и матрице размером 30х30 программа иногда вылетает с кодом завершения 255. С небольшими изображениями программа работает стабильно, как можно решить проблему? Версия Qt 5.6.2 (MinGW 4.9.2).
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Февраль 13, 2017, 22:04 »

запустить в отладчике, глянуть, где вылетело?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
ShiroExorcist
Гость
« Ответ #2 : Февраль 13, 2017, 22:20 »

отладчик ни чего не выдаёт, программа тупо вылетает
Записан
ShiroExorcist
Гость
« Ответ #3 : Февраль 13, 2017, 23:51 »

запустить в отладчике, глянуть, где вылетело?
Удалось поймать ошибку. Выдаёт sigsegv segmentation fault на строке

leftLbl->setPixmap(QPixmap::fromImage(img));
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Февраль 14, 2017, 08:10 »

leftLbl существует?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ShiroExorcist
Гость
« Ответ #5 : Февраль 14, 2017, 08:20 »

Да leftLbl существует и программа работает с изображениями меньшими по разрешению, правда иногда тоже вылетает
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Февраль 14, 2017, 08:58 »

А c img ничего плохого не происходит?

Добавьте логирование img перед leftLbl->setPixmap(QPixmap::fromImage(img)); (а лучше везде поставить логирование)

Записан

ShiroExorcist
Гость
« Ответ #7 : Февраль 14, 2017, 09:27 »

В img записываются значения от 0 до 255, потом оно записывается в label
Отладчик пишет, что ошибка в Z29qt_convert_rgb888_to_rgbx8888PjPKhi
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #8 : Февраль 14, 2017, 09:35 »

Интересная функция вызывается: qt_convert_rgb888_to_rgbx8888

Покажите конструктор, вызываемый для img

Записан

ShiroExorcist
Гость
« Ответ #9 : Февраль 14, 2017, 09:59 »

QImage img(tempLeft, Wmax, Hmax, Wmax, QImage::Format_Indexed8);

QVector <QRgb> color_table;
For(int i=0; i<256; i++)
    color_table.append(qRgb(i,i,i));
img.setColorTable(color_table);

tempLeft одномерный массив хранящий интенсивность
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #10 : Февраль 14, 2017, 10:59 »

Приложите тогда, пожалуйста, минимальный проект с проблемой
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Февраль 14, 2017, 11:48 »

При реализации задачи по обработке двух пар изображений разрешением 640х480 появилась необходимость увеличить поля изображение на половину матрицы свёртки, написал три простые функции для этого. Конечное монохромное изображение хранится в трёх динамических двумерных массивах.
Матрица свертки - а что это? Монохромное изображение - ну наверное пыксель может быть только 0 или 1. Тогда зачем хранить его в 3 динамических двумерных? И кто такие эти "массивы" - какие контейнеры?

Ой, наверное всем остальным все это понятно, ведь они не задают таких вопросов  Улыбающийся
Записан
ShiroExorcist
Гость
« Ответ #12 : Февраль 14, 2017, 11:53 »

Матрица свёртки это изображение которое будет умножаться на пиксели исходных изображений.
Монохромное изображение тоесть изображение в оттенках серого от 0 до 255, левое изображение в оттенках серого в одном массиве, правое в другом, а в третьем сама матрица свёртки.
Записан
ShiroExorcist
Гость
« Ответ #13 : Февраль 14, 2017, 13:26 »

В архиве, помимо проекта, два изображения LM1 и m1, LM1 необходимо загрузить как правое и левое изображение, m1  матрица свёртки. Как только в диалоге выбирается матрица свёртки происходит выполнение функций, переводящих изображения в оттенки серого. Программа не всегда вылетает с ошибкой, для 100% получения ошибки необходимо в качестве свёртки загрузить так же LM1 вместо m1.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #14 : Февраль 14, 2017, 19:06 »

"изображение в оттенках серого от 0 до 255" - это уже не монохромное, это 256 цветов Улыбающийся

По коду сложно что-то сказать (он Write Only), но скорее всего, у Вас банально вылет за границу массива в одном из if-циклов. Дебагать надо.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.246 секунд. Запросов: 23.