[Resolved] Python + OpenCV = Kép memóriába

Van egy kis kép manipuláló műveletem, ami szépen működik is.
Leegyszerűsítve a programot, így fest:

data = numpy.fromstring(stream.getvalue(), dtype=numpy.uint8)
image = cv2.imdecode(data, 1)
cv2.putText(image,"Hello World!", (10,10), cv2.FONT_HERSHEY_SIMPLEX, 2, 255)
cv2.imwrite("/temp/image.jpg", image)

A data változó a képet tartalmazza, ami egy kamerából jön.
Az image változóba kerül a kép olyan formában, amivel az OpenCV tud rajta garázdálkodni. Rá is írok egy Hello Word szöveget.
Végül elmentem jpg formában.
Nos ez remekül működik is eddig.

Viszont én nem akarom elmenteni fájlba, hanem ugyanúgy akarom tovább tárolni, ahogy a data változóban volt az eredeti.
Na itt van a gond, mert ez sehogy nem jön össze.

Alighanem a imencode() függvényt kellene használnom, de akárhogy paraméterezem fel, mindig kiabál valami miatt.
A dokumentáció szerint három paraméter kellene neki.

Legyen:

result, encimg = cv2.imencode('.jpg', image,  [1, 90])

A result true, vagy false lehet, az encimg pedig az encodeolt kép.
Erre a kövit mondja:

result, encimg = cv2.imencode('.jpg', image,  [1, 90])
TypeError: 'bool' object is not iterable

Széttúrtam már a netet, de még csak működő példát sem találtam az encodeolásra.

Ha valakinek van ötlete rá, azt nagyon megköszönném!

 

Update:
Közben kiderítettem, hogy az imencode() bugos a cv2-ben!
Helyette javasolják a régi EncodeImage() használatát.
Mondjuk nem túl szép megoldás betölteni a cv és cv2-őt is, de hát ha nincs más, akkor így lesz.

image_raw = cv.fromarray(image)
new_image = cv.EncodeImage('.jpeg', image_raw, [1,90] )

És így már újra jpeg-ben van a kép!

Hozzászólások