2011-02-02 16 views
7

iPhone uygulamam, AVFoundation'ın AVCaptureSession özelliğini kullanarak kameradan gerçek zamanlı verileri yakalar. Bu verilere çalışma zamanında delege yönteminde erişebiliyorum ve bunun dışında bir görüntü oluşturabiliyorum. CGImage, UIImage veya sadece ham veriler (CMSampleBufferRef) olabilir.Görüntü Parlaklığını/Parlaklığını Belirleme

Yapmaya çalıştığım şey, parlaklığı, bu verilerin parlaklığını (görüntü) hesaplamaktır. Ya da giriş ışığının ne kadar parlak olduğunu gösteren başka bir değer olabilir.

Bu değeri almanın standart bir yolu var mı? Belki OpenGL kullanarak.

Şimdiden teşekkürler.

cevap

13

Sadece resminizi YUV format'a dönüştürüp, luma kanalının ortalamasını hesaplayın. Renk dönüşümü tipik bir işlemdir ve her türlü iyi görüntü işleme çerçevesi onu destekler. Örneğin, OpenCV (OpenGL dediniz, ama bu gerçekten görüntü işleme ile ilgili hiçbir şey yapmıyor, bende OpenCV demek istediğimi varsayalım) CvtColor.

Y' = 0.299*R + 0.587*G + 0.144*B 

luma kanalını almak için, ve sonra ortalamayı hesaplamak: kullanışlı Böyle bir çerçeve var ama piksel yoğunluklarına erişimi yoksa

, sen denklemi kullanabilirsiniz. R, G ve B sırasıyla kırmızı, yeşil ve mavi kanalları temsil eder. Senin kameran ile diyafram değiştirerek parlak/koyu sahnelerde telafi edeceği mümkün olduğunu

DÜZENLEME

Not. Bu kameraya bağlı, ama sanırım çoğu kamera bunu yapıyor - aksi takdirde resimleriniz ya doymuş (saf beyaz) ya da düz siyah - sonuçta işe yaramıyor. İnsan gözü aslında do the same thing.

Dezavantajı, sadece bir görüntüye bakarak karanlık veya aydınlık bir ortamda olup olmadığını söylemek zor. Bu durumda, görüntünün ötesine geçip kamerayı sorgulamanız gerekebilir. Teoride, bunu doğrudan bir sürücü (olası) veya belki de görüntü meta verilerine bakarak (örn. JPEG ile EXIF) yapabilirsiniz. Son olarak, tam olarak parlaklığını bilmek istediğiniz şeyin ne olduğunu söylemediniz. Genel sahne ise, ortalama yeterli olacaktır. Sahnenin bir parçasıysa, biraz daha akıllıca bir şeyler yapmak zorunda kalabilirsiniz. Durum buysa, bize bildirin.

+0

Teşekkürler, bunun çalışması gerekiyor. Bir deneme yapıp sonucu burada yayınlayacağım. – krafter

+0

Düzenlenmiş yorumuma bir göz atın - Potansiyel bir sorun ve bunu çözebileceğiniz bazı yollar belirledim. – misha

+0

Evet, bu aslında işe yarıyor: piksel bilgisini renk yoğunluklarına bölerek daha sonra burada gösterildiği gibi Y'yi hesaplar. Kameranın ayarlayabilmesi için küçük (hızlı) ışık titreşimlerinin ortalama parlaklık değerine ihtiyaç duyduğumdan, bu yöntem işe yarıyor. Tekrar teşekkürler. – krafter