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

OpenCV и большие изображения

15.10.2023, 21:30. Показов 24420. Ответов 30

Студворк — интернет-сервис помощи студентам
OpenCV и большие изображения

Здравствуйте.

Столкнулся проблемой на opencv. Версия последняя на данный момент. 4.8.1.
Пытаюсь создать и потом сохранить в tiff изображение разрешением 22000х22000 в разрядность. 48 бит. Ну то есть цветное 16 бит на канал.
C++
1
TIL_CV_Image[Img_IDX].create(Height_In,Width_In,Bit_Depth_In);
Оно создаётся. Но процесс сохранения как бы зависает. И файл не появляется.
Сохраняю так
C++
1
cv::imwrite(File_Name, TIL_CV_Image[Img_IDX]);
Пишу прослоечную DLL для другого языка. Для этого использую VC++ 2017.
Если работать с изображением размером 15000x15000, то всё нормально и оно создаётся. И сохраняется.
Предполагаю, что эта ерунда происходит если размер файла будет превышать 2Гб.
Но, это не есть хорошо. Как это побороть?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2023, 21:30
Ответы с готовыми решениями:

Загрузка изображения из файла с библиотекой openCV VS2015
Не работает загрузка изображения из файла. Переменная после использования фунцкии из библиотеки opencv cvLoadImage остается...

OpenCV: получить гистограммы каналов для области изображения
Здравствуйте, у меня есть простой код, который собирается, но вылетает при запуске. Задача: получить гистограммы каналов для области...

Изменение параметров изображения в зависимости от положения ползунка (Opencv)
Помогите пожалуйста написать класс, который будет изменять яркость, насыщенность и цветовую гамму изображения в зависимости от положения...

30
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
17.10.2023, 02:00
Цитата Сообщение от Burster Посмотреть сообщение
Как это побороть?
Для начала залезть в документацию вашей версии библиотеки и посмотреть наличие ограничений у конкретно вашей реализации изображения. Если не попадаем - идём смотреть ограничения стандарта 17 в связке с этой библиотекой (бывает, но реже). Если не попадаем опять - идём смотреть ограничения уже самой ОС
0
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 52
17.10.2023, 02:36  [ТС]
Про ограничения там я ничего не нашёл. У самого формата лимит на размер файла в 4 Гб. тут наблюдаю лимит на 2 Гб. То есть используются знаковые 32-х разрядные значения. Уж тем более тут нет никаких ограничений ОС по этому вопросу. Где-то вместо DWORD использовали Integer. Скорее всего в этом дело. Но, где они там не учли и как это пофиксить - это уже слишком для меня.
0
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
18.10.2023, 01:11
Цитата Сообщение от Burster Посмотреть сообщение
и как это пофиксить - это уже слишком для меня
Выкинуть решение и пойти другим путём (другой формат, который не упрется в 2гб). Довольно часто такое бывает

Добавлено через 33 секунды
Или обертку новую делать, если в текущий формат залезть нельзя и поправить
0
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 52
18.10.2023, 13:34  [ТС]
Не подходящее решение. У формата ограничение не 2 а 4 Гб. Косяк как в OpenCV, так и в Imageen. Ну, а TIFF выбран потому, что только его в виде 48 бит несжатым читает быстрый внешний JPEG2000 компрессор.

Добавлено через 1 минуту
Было бы идеально как-то формировать 1) заголовок TIFF файла, 2)Построчную запись в него и 3) Формирование поля тэгов в конце. Последнее и есть самое сложное. Тогда Точно не было бы лимита в 2 гб.
0
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263
18.10.2023, 14:09
Цитата Сообщение от Burster Посмотреть сообщение
1) заголовок TIFF файла, 2)Построчную запись в него и 3) Формирование поля тэгов в конце. Последнее и есть самое сложное.
Ну вот у вас уже есть порядок действий.
Проработайте каждый пункт и все будет ок.

Цитата Сообщение от Burster Посмотреть сообщение
Последнее и есть самое сложное.
Что конкретно?

То есть вы можете создать заголовок записать данные но без тегов?? И все полученный файл могут читать как наддо?
0
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 52
18.10.2023, 22:46  [ТС]
Чтобы проработать третий пункт (где тэги), это нужно детально изучить формат TIFF и тем самым написать свою библиотеку построчной записи в этот формат. Долго и очень муторно. Записать золовок и сами данные это не сложно. Но без тэговых полей в конце файла изображение нечитаемо. Да, оно и понятно.
0
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
19.10.2023, 02:00
Цитата Сообщение от Burster Посмотреть сообщение
это нужно детально изучить формат TIFF и тем самым написать свою библиотеку построчной записи в этот формат.
А так и есть обычно с уникальными решениями. Его с нуля нужно прорабатывать. А всё остальное уже написано, что попадалось хоть раз
0
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263
19.10.2023, 07:57
Цитата Сообщение от Burster Посмотреть сообщение
это нужно детально изучить формат TIFF
Да прям детально? Неужели вам нужен прям абсолютно полный перечень тегов?

Вот есть либа. Покурить исходники подергать кусками в свой проект и на основе выродить то что вам надо.

Цитата Сообщение от Burster Посмотреть сообщение
Долго и очень муторно.
А как вы хотели то?? "Ок, гугл - дай мне готовый код?" Серьезно чтоли?

НУ а еще есть вот такая либа:

Вроде как никаких проблем нету с созданием картинок размером 365,210 x 313,165 pixels Image data = 114.4Gp File size = 14GB
0
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 52
19.10.2023, 17:13  [ТС]
Да, занятная библиотека. Жаль. что написана на не на языке, на котором я обычно пишу. Да и лимит у TIFF в 4 Гб. Как там у них вышло 14 гб, загадка.
0
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263
19.10.2023, 18:11
Цитата Сообщение от Burster Посмотреть сообщение
. Как там у них вышло 14 гб, загадка.
так bigtiff специально же сделали. В чем загадка то.
Надо изучить формат тогда чтобы не было загадкой.

Цитата Сообщение от Burster Посмотреть сообщение
что написана на не на языке, на котором я обычно пишу.
Да что же это такое то за подход ... Ну в таком случае все. Проект можно считать закрытым. Готового решения нет, изучать формат и писать свои обработки муторно, а имеющиеся решения не на том языке.
Печаль ..

Можно расходиться, а я думал интересная тема нарисовалась .. эх..
0
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 52
21.10.2023, 13:54  [ТС]
Да, наверное bitiff для этого и сделали, Я про него до этого не слышал даже. Но, вот не факт. что после генерации такого tiff его правильно воспримет программа компрессора. К сожалению на С++ пишу крайне мало. Есть ли уже готоdая DLL для работы с bigtiff с описание экспортируемых функций? Так что расходиться пока преждевременно.
0
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
22.10.2023, 20:36
Цитата Сообщение от Burster Посмотреть сообщение
Есть ли уже готоdая DLL для работы с bigtiff с описание экспортируемых функций?
Вы проект делаете или ищете куски других проектов, что бы слепить из них свой?
0
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 52
22.10.2023, 21:03  [ТС]
Я хочу найти быстрое решение моей текущей задачи.
0
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263
22.10.2023, 21:14
Цитата Сообщение от Burster Посмотреть сообщение
Я хочу найти быстрое решение моей текущей задачи.
Так если задачка уникальная то решения нет и вы потратите лет 100 на поиски. Ну или ожидание что кто то когда то сотворит.
0
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 52
22.10.2023, 21:28  [ТС]
Откуда возникло 100 лет? Сохранение в tiff размером более 2 Гб вещь слишком уникальная?
0
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263
23.10.2023, 08:13
Цитата Сообщение от Burster Посмотреть сообщение
Есть ли уже готоdая DLL для работы с bigtiff с описание экспортируемых функций?
Вас везде носом тыкать надо?
Если бы вы внимательнее посмотрели ссылки то увидели что там есть статическая библиотека. При желании можно было бы сделать свою динамическую обертку.
Но это надо конечно изучать а вам

Цитата Сообщение от Burster Посмотреть сообщение
Долго и очень муторно.
С таким подходом можно только удачи пожелать.

Цитата Сообщение от Burster Посмотреть сообщение
Сохранение в tiff размером более 2 Гб вещь слишком уникальная?
Вполне возможно.
0
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263
23.10.2023, 08:48
А вообще не пойму что у вас там за беда такая..
Взял CV 4.6.0. с оберткой OpenCVSharp.

Написал код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
       try
       {
           int sz = 32000;
           OpenCvSharp.Mat tf =new  OpenCvSharp.Mat(new OpenCvSharp.Size(sz, sz), OpenCvSharp.MatType.CV_16UC3);
 
           ushort val = 0;
           Random rnd = new Random();
           for(int i=0;i<sz;i++)
               for (int ix = 0; ix < sz; ix++)
               {
                   tf.At<ushort>(i, ix) = (ushort)rnd.Next(ushort.MaxValue);
           }
           var t = OCV.Cv2.GetVersionString();
           OCV.Cv2.ImWrite("C:\\outfile.tiff", tf);
            
       }
       catch (Exception ex)
       {
 
       }
Сборка Opencv 64x, Винда 64x.

Сгенерил файлик. Все нормально работает. Винда видит картинку, фотошоп также загружает.

Так что проблема скорее всего в неправильной работе и компиляции. Используйте 64 и не надо ничего выдумывать.
И оперативы на компе должно быть достаточно чтобы провести все манипуляции.

PS: А еще можно разные параметры IMWRITE_TIFF_COMPRESSION задавать чтобы получить нужное соотношение упаковки и качества.
в соответсвии с мануалом.
Миниатюры
OpenCV и большие изображения  
0
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 52
23.10.2023, 10:45  [ТС]
Разумеется,я всё делаю под Win64, а не под Win32. Для последней создать в памяти файл размером в 2 Гб будет невозможно.
Функция создания изображения
C++
1
2
3
4
extern "C" __declspec(dllexport) void __stdcall TIL_CV_Create_Image(unsigned long Img_IDX, unsigned long Width_In, unsigned long Height_In, unsigned long Bit_Depth_In)
{
    TIL_CV_Image[Img_IDX].create(Height_In,Width_In,Bit_Depth_In);
}
Функция записи пиксела изображения (Работает медленно, но это уже другой вопрос)
C++
1
2
3
4
5
6
extern "C" __declspec(dllexport) void __stdcall TIL_CV_Set_Pixel_48_Bit_Long_RGB(unsigned long Img_IDX, unsigned long long X_In, unsigned long long Y_In, ushort R_In, ushort G_In, ushort B_In)
{
    TIL_CV_Image[Img_IDX].at<cv::Vec3w>(Y_In, X_In)[0] = B_In;
    TIL_CV_Image[Img_IDX].at<cv::Vec3w>(Y_In, X_In)[1] = G_In;
    TIL_CV_Image[Img_IDX].at<cv::Vec3w>(Y_In, X_In)[2] = R_In;
}
Функция сохранения в файл
C++
1
2
3
4
extern "C" __declspec(dllexport) void __stdcall TIL_CV_Save_Image(unsigned long Img_IDX, char* File_Name)
{
 cv::imwrite(File_Name, TIL_CV_Image[Img_IDX]);
}
Эти функции экспортирует 64-х разрядная DLL, созданная в VC++ 2017. Она импортируется потом в проекте Embarcadero RAD XE8. Если изображение меньше 2 Гб, то нормально работает. Если больше, то оно сохраняется в некорректном виде. ACDSEE его не читает и kakadu компрессор говорит, что изображение повреждённое.

Добавлено через 6 минут
И RAM на ПК 24 Гб. Вполне должно хватить для создания хотя бы 3 Гб изображения. Проверял и на ПК, где больше RAM. Например 40 Гб. Всё ровно тоже самое.

Добавлено через 2 минуты
Да, и изображение сохраняется в несжатом виде. Для kakadu нужно именно так.

Добавлено через 39 минут
И, да. При разрешении 32000х32000 у вас должно получиться более 4 Гб файл, а это уже выходит за пределы размера TIFF. Сохранять тогда по идее нужно в BigTIFF. Как он у вас читался в итоге - просто загадка.
0
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263
23.10.2023, 12:31
Цитата Сообщение от Burster Посмотреть сообщение
И, да. При разрешении 32000х32000 у вас должно получиться более 4 Гб файл
Все зависит от того что изображено. У меня по сути шумовые данные. Видимо стандартный компрессор упаковывает. До даже 3.19 говорит о том что с кодом генерации все в порядке.

И код оформите корректно тегами а то глазам больно.

И что за функция TIL_CV_Set_Pixel_48_Bit_Long_RGB??
Вы точно правильно используете данные?? у вас же 16 бит на канал. А что записываете?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.10.2023, 12:31
Помогаю со студенческими работами здесь

OpenCv. Получить зеркальное отображение изображения, используя функции: CvScalar, CvGet2D, CvSet2D
Доброго времени суток. Прошу помощи в написании кода. Нужно сделать зеркальное отображение изображения, используя только эти функции:...

Большие изображения на S3
Когда-то читал про питоновскую(?) либу, которая может брать изображения с s3 и на лету создавать несколько копий разного размера (допустим...

OpenCV склеить изображения
Пытаюсь переделать программу на плюсах(https://ramsrigoutham.com/2012/11/22/panorama-image-stitching-in-opencv/) под java но никак не...

OpenCV открытие изображения
Среда - Visual Studio 2013 Подключенные библиотеки OpenCV для фильтрации изображения Нужно загрузить изображение и отфильтровать...

Массив изображения opencv
Здравствуйте. Никто не знает, как записать в массив значения цветов пикселей? У меня есть код, который изменяет изображение, выделяя...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru