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!
- 4086 megtekintés
Hozzászólások
Úgy tűnik, hogy az imencode függvény mégse két értéket ad vissza, csak egyet (bool-t).
Esetleg ez segíthet:
http://answers.opencv.org/question/17829/error-during-image-decoding-im…
--
♙♘♗♖♕♔
- A hozzászóláshoz be kell jelentkezni
Igen, azt is észrevettem közben, de ezerféle módon próbáltam működésre bírni, de nem ment.
Aztán már nem tudom hol, de írták, hogy bugos és használjuk helyett a régebbi EncodeImage() -t. Azzal most működik is :)
- A hozzászóláshoz be kell jelentkezni