|
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
|
||||||||||||||||
Некорректность цветопередачи QImage, полученного из IplImage (OpenCV)25.02.2013, 20:08. Показов 8949. Ответов 39
Метки нет (Все метки)
Проблема заключается в некорректной конвертации изображения из формата IplImage (OpenCV) в формат QImage (Qt). Передачу данных осуществляю следующим путем (получаю изображение в IplImage и передаю его в QImage):
В Пикаса показан оригинал изображения, в окне "cvtest5" - он же, отображенный с помощью средств OpenCV, в окне "test5" - он же, перегнанный из IplImage в QImage. Если его открыть таким образом:
Вариант, что некорректно отображаются цвета на мониторе не подходит (что доказано последним экспериментом и...), в основном проекте пробывал QImage сохранять в jpeg следующим путем:
Я вроде создаю 3-канальное изображение (QImage::Format_RGB888), но все же такое ощущение, что вмешивается альфа-канал и "портит" картинку. На тестовом приложении пробывал сравнивать в определенных точках значения каждого канала (красный, зеленый, голубой), вроде как совпадают по значению и не перепутаны ( например, вместо РГБ - находится БГР). И еще одно изображение: Хочу обратить внимание, что левая часть изображения (коричневая) не сильно "пострадала", в отличии от более светлых. Буду рад любой помощи, пока буду дальше копать. Производить копирование данных по каждому каналу отдельно или использую структуру cvMat не очень хочется, но... если не будет других вариантов, а они дадут результат - будем делать так, чтобы было красиво!
0
|
||||||||||||||||
| 25.02.2013, 20:08 | |
|
Ответы с готовыми решениями:
39
OpenCV: конвертация IplImage в серый OpenCV. IplImage* cvCreateImage в Mat
|
|
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
|
|
| 25.02.2013, 20:17 [ТС] | |
|
Да, OpenCV изначально оперирует BGR, но в случае, если из структуры IplImage использовать данные imageDataOrigin, то получаем их в порядке RGB. К тому же, я уже упоминал, что пробывал сравнивать на разных пикселях значения каналов (у меня первая мысль тоже такая была), но они одинаковые и по порядку в том числе.
Но все-равно спасибо! Жду еще предложений!
0
|
|
|
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
|
||||||||||||
| 25.02.2013, 20:34 [ТС] | ||||||||||||
|
Чистый, Я ж этого и не отрицаю. Я специально сделал этот скриншот, чтобы отпали сомнения в самом QImage. Проблема зарыта где-то всего лишь в одной этой инструкции:
При создании IplImage используется конструкция
Остается только строчка (uchar *)img->imageDataOrigin, Где "нагрешил" не знаю.
0
|
||||||||||||
|
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
|
||||||||||||||||
| 26.02.2013, 15:49 [ТС] | ||||||||||||||||
|
Чистый, да. В последнем сообщении я ж написал, как она создается в OpenCV uchar*channels = 8 *3 = 24 bits . а потом в нее закидываются данные (сам рисунок), но это уже не может повлиять ни на ее размер, ни на битность, ибо память выделена уже.
Добавлено через 5 минут Есть вариант, конечно, копировать данные по каналам (пока не проверял). Но мне охота избежать по возможности лишних инструкций... Добавлено через 18 часов 58 минут Чем дальше в лес, тем толще... да не, не толще, - цветастей и с большим количеством байт наши партизаны-рисунки!!! ))) Сделал простенькую вещь:
Дальше, сделал "Пуск" и ... Qt сказал (точней показал) мне фак - я не разобрал сразу и вооружился лупой от 7го детища Билла: "Интересненько получается" - сказал я себе и полез серфить "эти наши интернеты" (© Линус Торвальдс, только не подумайте, что это я тролю - этого человека я очень уважаю). Нарыл следующую статью. "Ай-яй-яй" - и добавил следующую инструкцию:
ВОПРОС: откуда же берутся эти ДВА избыточных БАЙТА??? (возможно из-за них у меня и проблемы с выводом приложения). Что в них должно быть, от чего их количество зависит (пока не тестил на разных изображениях, если 2 байта на любой картинке это проще)? Построчное копирование пока не пробывал (как по приведенной ссылке), хотелось избежать этого и сразу весь кусок данных закидывать. Тем не менее, если удастся решить с помощью построчного копирования, задачу не считаю решенной. Если что получится или накопаю - поделюсь, а пока "ищу ответы" - жду мыслей. Заранее благодарен! Не по теме: З.Ы. Оказывается есть теги для С++Qt - круто!
0
|
||||||||||||||||
|
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
|
|
| 26.02.2013, 16:42 | |
|
4 x 8 = 32 (CMYK)
0
|
|
|
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
|
||
| 26.02.2013, 16:54 [ТС] | ||
|
Без обид, dphn , но я использую "без объяснений, если написано что так нужно и оно все пашет, или уже копаю, пока не получу удоботворимый объяснимый результат. Что делать с Вашими расчетами мне пока непонятно...
0
|
||
|
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
|
|
| 26.02.2013, 18:27 | |
|
Попробуйте вместо QImage ( const uchar * data, int width, int height, Format format )
использовать QImage ( const uchar * data, int width, int height, int bytesPerLine, Format format ) соответственно вместо int bytesPerLine указать 24 Пожалуйста, отпишитесь Добавлено через 14 минут Я думаю, дело в следующем: QImage::QImage ( uchar * data, int width, int height, Format format ) Constructs an image with the given width, height and format, that uses an existing memory buffer, data. The width and height must be specified in pixels, data must be 32-bit aligned, and each scanline of data in the image must also be 32-bit aligned.
0
|
|
|
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
|
||||||||||||||||||||
| 26.02.2013, 18:56 [ТС] | ||||||||||||||||||||
|
Ну, как получилось у меня
* в файле "qimage.cpp" читаем:
((10*24+31) >> 5) << 2 = 32!!! Сошлось, вроде как... НО!
Если дальше для построения рисунка эта инфа не нужна , то просто в голове останется галочка (а может кому-то и поможет): счет ведется приблизительно с точностью в 4 байта))) Копаем дальше! Не по теме: Для модератора! Добавлено через 15 минут Только по поводу применения:
* для тестового рисунка с шириной в 10 пикселей это будет 32 байта; * для реального проекта:
dphn, еще раз спасибо. как будут результаты отпишусь. Будут отрицательные буду дальше "сырцы пытаться копать
0
|
||||||||||||||||||||
|
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
|
|
| 26.02.2013, 19:04 | |
|
Так правильно, stride
Не ширина всей линии / на высоту.Удачи
0
|
|
|
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
|
|||||||
| 26.02.2013, 19:10 [ТС] | |||||||
|
Докладываюсь: фокус не удался - факир был пьян. Последнюю версию преобразовал так:
иСЧу далее... но за помощь все-равно спасибо!
0
|
|||||||
|
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
|
|
| 26.02.2013, 19:13 | |
|
От вы ж упрямый. Пожалуйста, напишите 24.
Пожалуйста!!!!!! )))))))))
0
|
|
|
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
|
|||
| 26.02.2013, 19:20 [ТС] | |||
|
Вот, пожалуйста, Вам Ваши Не верите? - Кину исходник - сами проверьте! У меня на этот счет родилась интересная теория. Сейчас пересчитаю на бумажке - если сойдется напишу, но она никак , судя по всему, не решает изначальную мою проблему "синеватых" рисунков... (((
0
|
|||
|
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
|
|
| 26.02.2013, 19:27 | |
|
Скиньте мне лучше оригинал картинки на pochta.dolphin СОБАКА gmail.com
0
|
|
|
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
|
|||||||
| 26.02.2013, 19:42 [ТС] | |||||||
|
dphn, допишу сейчас этот пост и
Теперь, как упрямец, опять о баранах. КьюТе считает на линию нам (см. ранее) 32 байта (округленное до кратного 4 в ббольшую сторону), на 10 строчек получается 320 байт. Реально имеем (см. вычисления ранее) 30 байт на строчку, итого на 10 строчек - 300 байт информации. В результате имеем избыточность в 20 байт, т.е. 20/3=6 пикселей, которые (как я предполагаю) КьюТе в конце "рисует" в виде серых/черных пикселей. На все тех же правах упрямца я сказал Qt, что у меня в строчке находится 30 байт:
Но! Я думаю, чтоб если бы у меня в основном проекте была такая же картина, то я бы получил смещенные байты, а я там просто "неправильно вижу" некоторый спектр, особенно желтый - так что думаю проблема не в этом, хотя не факт. Сейчас попробую и дальше будет видно.
0
|
|||||||
|
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
|
|
| 26.02.2013, 19:45 | |
|
Вот-вот, на опен сырцах. Если жпег индексированный, как это часто бывает...
0
|
|
|
1 / 1 / 0
Регистрация: 14.05.2010
Сообщений: 36
|
||
| 26.02.2013, 19:50 [ТС] | ||
|
Добавлено через 39 секунд На почту Вам кинул как и обещал))
0
|
||
|
4 / 1 / 0
Регистрация: 26.02.2013
Сообщений: 30
|
|
| 26.02.2013, 19:55 | |
|
хм, GIMP говорит, rgb. Значит, дело не в изображении. Наверное, скидывайте код.
0
|
|
| 26.02.2013, 19:55 | |
|
Помогаю со студенческими работами здесь
20
Что использовать Mat или IplImage в OpenCV? Где правда? Как преобразовать Bitmap (System::Drawing::Image) в IplImage*frame (openCV)? Как сохранить QImage (Qt) в lplImage (OpenCV)? Как отобразить QImage сложной формы на другом QImage, чтобы фон от 1-го рисунка был прозрачен? Нарушение цветопередачи в видео Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|