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

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

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

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

1 Ответ

3 голосов
/ 27 марта 2012

Итак, в конечном итоге вы можете просто выделить 2 содержимого файла (данные и метаданные) за своим собственным классом 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()
...