2010-11-18 8 views
0

YUV renk uzayındaki bir görüntüyü bir JPEG resmine dönüştürme hakkında nasıl giderim? YUV'yi OpenCV ile kayıp sıkıştırmaya dönüştürme

Bir Char * değişkeni kaydedilmiş bir ham görüntü verisine sahip:

char* frame = (char*)camera->getFrame(); // YUV colorspace image data 

yerine bir JPEG resim verilerine bu dönüştürmek gerekir. Onu diske kaydetmek istemiyorum çünkü onu bir akışa göndereceğim.

cevap

1

OpenCV, bu işlevi dışa aktarmaz. En temiz kodlama için libjpeg'u kullanmaktır. Bu soruların cevabını bakınız:

+0

Peki çağırabilir, bu iyi değil. Kapalı gömülü linux ile bir sistem üzerinde onları akış önce görüntüleri sıkıştırmak gerekir. Sadece OpenCV var ve herhangi bir ek kütüphane kuramıyorum. Görüntüleri akıtmadan önce sıkıştırmanın başka bir yolu var mı? Kötü kaliteyi korumam gerek. Gzip kullanmak iyi bir fikir mi? –

+0

İkinci bağlantımın kabul edilen yanıtında, OpenCV'nin dahili olarak bir dosyaya yazmadan JPEG'e kodlama işlevlerine sahip olduğunu göreceksiniz. Sadece OpenCV'nin daha yeni sürümlerinde, API'nın bir parçası olmadıkları için, başka bir bildirimde bulunmadan değişebilirler. Belirli bir kütüphane ayarına sahip kapalı bir sistemde sıkışmışsanız, bununla ilgilenmeyebilirsiniz. Ayrıca, zip algoritması her zaman yardımcı olacaktır, ancak% 50'den daha fazla bir azalma beklememelisiniz. – ypnos

1

dosya cvcolor.cpp için opencv src edin. Bu, içindeki tüm renk dönüşümlerine sahiptir.

Sana bu çizgiye yakın mevcut rutinleri değiştirmeye önermek:

/* BGR/RGB -> YCrCb */

Bunlar neredeyse tam olarak YUV kodlama için gerekenler. eğer onun 4: 4: 4 ve 4: 2 ya da 4: 2: 1: #include olur

  • jpg kodlayıcı ve kod çözücü grfmt_jpeg.cpp olan jpg sıkıştırma 1

    " jpeglib.h"

  • bu doğrudan