Перейти к содержанию

Передача изображения с камеры OV9655 на ПК


swat24

Рекомендуемые сообщения

Добрый день.

Необходимо передать изображение из камеры OV9655 на ПК и отобразить его, Камера имеет выходной формат изображения RGB 565, с камеры считываю с использованием DCMI:

uint32_t cameraData = DCMI_ReadData();

И после этого передаю через USART на ПК:

USART_SendData(Open_USART, (uint8_t) cameraData>>24);
while (USART_GetFlagStatus(Open_USART, USART_FLAG_TC) == RESET)
{}

USART_SendData(Open_USART, (uint8_t) cameraData>>16);
while (USART_GetFlagStatus(Open_USART, USART_FLAG_TC) == RESET)
{}

USART_SendData(Open_USART, (uint8_t) cameraData>>8);
while (USART_GetFlagStatus(Open_USART, USART_FLAG_TC) == RESET)
{}

USART_SendData(Open_USART, (uint8_t) cameraData);
while (USART_GetFlagStatus(Open_USART, USART_FLAG_TC) == RESET)
{}

На компьютере принимаю через терминал и сохраняю в HEX файл. Скажите как потом его можно открыть? В качестве просмотрщика планирую использовать Java, но теперь вопрос как преобразовать данные с камеры в изображение.

Может уже кто-то имел опыт работы с данной камерой? Подскажите, как можно передать изображение с нее на ПК?

Ссылка на комментарий
Поделиться на другие сайты

добавьте в начале файла шапку bmp формата и сохраните с расширением bmp и у вас получится готовая картинка которую сможете посмотреть чем угодно

Ссылка на комментарий
Поделиться на другие сайты

ок, сейчас попробую, а передаю правильно? Начиная со старшего байта необходимо?

 

добавил шапку, но открывать не хочет как картинку, пишет файл поврежден

Изменено пользователем swat24
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Насколько я помню, в шапке должен быть указан размер файла и разрядность цветности. 

 

ПС. Попробуйте сначала "потренироваться на кошках", т.е. на заведомо известных данных простейших картинок. Я бы начал с одного пиксела :)

Изменено пользователем КЭС
Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Хорошо, а как-нибудь без шапки его можно открыть? каким-нибудь редактором? Я не особо уверен, что правильно передается с камеры изображение

Изменено пользователем swat24
Ссылка на комментарий
Поделиться на другие сайты

найдите в поиске картинку с таким-же разрешением и битностью как у вас и скопируйте от туда шапку. учтите что с камеры, если я не ошибаюсь данные начинают приходить начиная с верхнего левого угла и заканчивая правым нижним. В бмп файле они должны быть расположены наоборот, то есть задом на перед.

Ссылка на комментарий
Поделиться на другие сайты

не нахожу с 16 битным цветом изображения, попробовал создать в кореле и paint.net, но там или 24 бита, или 8 бит.

Ладно, попробую с камерой, которая уже JPEG выдает

Ссылка на комментарий
Поделиться на другие сайты

Я в фотошопе делал, только мне нужно было не для камеры, а для записи скриншота с дисплея на карту памяти. Какое у вас разрешение?

Ссылка на комментарий
Поделиться на другие сайты

по идее если в шапке указан верный размер файла и прочие служебные данные, то файл с абсолютно любыми данными (верными или нет) откроется без проблем. Разница будет только в том будет ли видно изображение или белый шум. Если не открывается, значит чтото с заголовком. Надо читать даташиты на bmp и вкуривать что именно не так

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

28 минут назад, andryxa сказал:

Какое у вас разрешение?

320x240, попробую еще с заголовком поиграться

http://www.fastgraph.com/help/bmp_header_format.html это правильный заголовок?

Изменено пользователем swat24
Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, swat24 сказал:

это правильный заголовок?

похож

теперь надо открыть картинку нормальную и сопоставить данные

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Создал изображение в paint.net - изменил размер, вставил свое изображение, но все-равно пишет "формат данного файла не поддерживается"

 

Оставил заголовок не изменяя вообще и получается следующее, похоже и передача не правильная

Безымянный.bmp

Изменено пользователем swat24
Ссылка на комментарий
Поделиться на другие сайты

Держите правильную картинку (черная, вместо данных нули) 320х240 16 бит RGB. Свои данные можно подставить в любом хекс редакторе.

камера.bmp

Ссылка на комментарий
Поделиться на другие сайты

Спасибо, в результате получается тоже, что и у меня с разноцветной мозайкой. Похоже не то считывается с камеры...

Смотрите, я считываю 32 бита данных с экрана, используются только 16 младших бит. И отправляю все, что принял. начиная со старшего байта. Правильно?

Изменено пользователем swat24
Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, andryxa сказал:

Использовать нужно старшие 5 бит красного, синего и 6 бит зеленого, для RGB 565. Это у вас один пиксель 32 бита?

да, считывается с камеры по DCMI 32 бита

Ссылка на комментарий
Поделиться на другие сайты

Что-то вы путаете, глянул даташит на камеру http://electricstuff.co.uk/OV9655-datasheet-annotated.pdf выходной формат данных 8 бит 565. То есть вы должны читать побайтно, на каждый пиксел идет два байта, в которых 5 бит красного цвета 6 бит зеленого и 5 бит синего цвета. В таком-же формате их и следует вставить в бмп картинку, после шапки. Откуда вы взяли 32 бита непонятно.

 

Ссылка на комментарий
Поделиться на другие сайты

У меня функция возвращает 32 бита, т.е. получается два пикселя. Я их и запихиваю в бмп...

С камерами никогда не работал, поэтому и вопросов куча)

в файле получается такое:

cameraData.gif

Изменено пользователем swat24
Ссылка на комментарий
Поделиться на другие сайты

В примере для камеры настраивается DMA на 32 бита источника и 16 бит приемник и отправляется на экран. Я считаю 2 байта на пиксель, так как выводится на экран, и буду отправлять попиксельно в юарт. Правильно? Вопрос как записывать в файл BMP? "00 00 ст мл" ? (ст - старший байт, мл - младший байт) или без пустых байт в начале?

Ссылка на комментарий
Поделиться на другие сайты

в файл нужно писать так-же как читаете но есть один нюанс, после шапки должен быть конец массива картинки, а в конце файла начало. короче массив данных полученных с камеры нужно каким-то образом развернуть и только после этого создать картинку

Ссылка на комментарий
Поделиться на другие сайты

хорошо, получается в шапке я указываю начало картинки и с этого адреса шлю "ст"+"мл" байты и так всю картинку, правильно? Если даже не переворачивать массив - то картинка будет перевернута, но должна быть. Еще в файле после массива данных идет массив нулей, попробовал его убрать - ругается на то, что файл поврежден. Его оставляю?

Ссылка на комментарий
Поделиться на другие сайты

нет, прочитанный массив нужно целиком перевернуть потому-что пиксель состоит из двух байт и у вас все перемешается. и только после переворота вставлять в картинку

Ссылка на комментарий
Поделиться на другие сайты

я понял.

В общем нашел пример сохранения BMP в формате 565 на JAVA:

public static void main( final String[] args ) {
        BufferedImage img = map( 320, 240 );
        savePNG( img, "C:/test.bmp" );
    }

    private static BufferedImage map( int sizeX, int sizeY ){
        final BufferedImage res = new BufferedImage( sizeX, sizeY, BufferedImage.TYPE_USHORT_565_RGB );
        for (int x = 0; x < sizeX; x++){
            for (int y = 0; y < sizeY; y++){
                res.setRGB(x, y, Color.WHITE.getRGB() );
            }
        }
        return res;
    }

    private static void savePNG( final BufferedImage bi, final String path ){
        try {
            RenderedImage rendImage = bi;
            ImageIO.write(rendImage, "bmp", new File(path));
        } catch ( IOException e) {
            e.printStackTrace();
        }
    }

это работает, допишу завтра прием по юарт и попробую. Должно быть следующее:

шапка:

42 4d 42 58 02 00 00 00 00 00 42 00 00 00 28 00
00 00 40 01 00 00 f0 00 00 00 01 00 10 00 03 00
00 00 00 58 02 00 00 00 00 00 00 00 00 00 00 00
00 00 03 00 00 00 00 f8 00 00 e0 07 00 00 1f 00
00 00

далее принятый массив читаю с конца и пишу в файл, начиная с 42 байта с помощью:

res.setRGB(x, y, Color.WHITE.getRGB() );

только вместо "Color.WHITE.getRGB()" принятые данные.

 

Спасибо, что помогаете :) Завтра буду пробовать и отпишусь о результате

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...