Nano Hash - криптовалюты, майнинг, программирование

Как добавить пользовательские метаданные в изображение OpenCV / numpy?

У меня есть вопрос.

Я выполняю ряд операций (изменение размера, копирование и т. Д.) С некоторыми захваченными изображениями в OpenCV, но я хочу установить некоторые конкретные метаданные (имена атрибутов также должны быть определены мной) для этих изображений, которые переживут эти операции. и может быть извлечен позже. Я не устанавливаю значения разрешения или другие значения, которые изменяются после этих операций. Как я могу это сделать? Я слышал о pyexiv2, но никогда не видел примеров с OpenCV.

Заранее спасибо!


  • У всех нас есть вопросы :-) Я так понимаю, вы говорите о добавлении метаданных в момент записи изображения в файл? OpenCV (включая версию 2.3.1 - самую последнюю) всегда предоставлял ввод-вывод изображений через библиотеку HighGUI. Так что вы можете написать хотя бы .jpg, .png, .tiff. и т.д. Однако концепция метаданных, прикрепленных к классу внутреннего изображения - лежащему в основе IplImage - до этого не существовала. Следовательно, вам придется записывать любые данные EXIF ​​post hoc в файл. 27.03.2012
  • P.S. В этом случае вы, вероятно, правы, используя pyexiv2. Как и в предыдущем вопросе: stackoverflow.com/questions/765396/ 27.03.2012

Ответы:


1

Итак, в конечном итоге вы можете просто скрыть содержимое двух файлов (данные и метаданные) за своим собственным классом python:

import cv 
import pyexiv2

class MyImage():

  _filename = None
  _data = None
  _metadata = None

  def __init__(self,fname):

    _filename = fname
    _data = cv.LoadImage(_filename)
    _metadata = pyexiv2.ImageMetadata(_filename)
    _metadata.read()

  def addMeta(self,key,value):
    _metadata[key] = pyexiv2.ExifTag(key, value)

  def delMeta(self,delkey):
    newdict = {key: value for key, value in some_dict.items()
                if value is not delkey}

  def resize(self,newx,newy):
    tmpimage = cv.CreateMat(newy, newx, cv.CV_8UC3)
    cv.Resize(_data,tmpimage)
    _data = tmpimage
    try: # Set metadata tags to new size if exist!
      _metadata['Exif.Image.XResolution'] = newx
      _metadata['Exif.Image.YResolution'] = newy
    except:
      pass

  def save(self):
    cv.SaveImage(_filename,_data) 
    _metadata.write()
27.03.2012
  • Спасибо за такой хороший ответ! Единственная проблема с использованием формата, такого как ttf или jpg, заключается в том, что я нигде не сохраняю изображения. Их захватывают, передают по сетевому соединению, отображают, и все. Я пробовал cv2.imencode(), но из-за какой-то ошибки не получается JPEG. Единственный способ - преобразовать в cvMat и использовать устаревший метод cv.EncodeImage(), который больше не сохранит метаданные. 28.03.2012
  • А, кажется, я понимаю твою проблему. Даже если вы используете Image class fromBuffer() метод PIL, вы можете по крайней мере создавать изображение в памяти даже из необработанных данных OpenCV. Однако, похоже, вы не сможете создавать / обновлять новые теги EXIF ​​через _2 _... :-( См. здесь. 28.03.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..