OpenCV Renk Uzayları Arası Dönüşümler
Daha önce temel dijital görüntü işleme kavramları bölümünde renklere ve renk uzaylarına değinmiştir. OpenCV’de birçok renk uzayı desteklenmektedir ve bunlar arasında dönüşüm yapılabilmektedir. Bu bölümde OpenCV ile bu renk uzayları arasında dönüşüm işlemleri için Imgproc sınıfı içerisinde cvtColor() metodu bulunmaktadır. cvtColor metodu parametre olarak iki adet mat nesnesi ve dönüşüm yapılacak olan renk uzayını almaktadır.
Imgproc.cvtColor(srcMat, dstMat, code);
srcMat: kaynak bir mat nesnesi yani dönüşümü yapılacak olan görüntü, dstMat: hedef mat nesnesi yani dönüşüm sonucunda oluşacak yeni renk uzayına sahip görüntü, code ise hangi renk uzayları arasında dönüşüm yapılacağıdır. Desteklenen bazı renk uzayları aşağıdaki tabloda yer almaktadır.
Kaynak Renk Uzayı 2 Hedef Renk Uzayı
COLOR_RGB2BGR
COLOR_RGB2BGRA
COLOR_RGB2GRAY
COLOR_GRAY2RGB
COLOR_RGB2HLS
COLOR_HSV2RGB
COLOR_RGB2HSV
COLOR_RGB2Luv
COLOR_HSV2RGB
COLOR_RGB2YUV
COLOR_RGB2Lab
RGB HSV Renk Dönüşümü
RGB (Red Greeb Blue – Kırmızı Yeşil Mavi) renk uzayından HSV (Hue Saturation Value – Renk tonu Doygunluk Değer) renk uzayına dönüşüm
public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Mat kaynakGoruntu=new Mat(); kaynakGoruntu=Imgcodecs.imread("C:\\kizkulesi.jpg"); Mat hedefGoruntu=new Mat(); //Okunanan RGB görüntüyü HSB renk uzayına çevirerek hedefGoruntu mat nesnesine atar Imgproc.cvtColor(kaynakGoruntu, hedefGoruntu, Imgproc.COLOR_RGB2HSV); Imgcodecs.imwrite("C:\\ kizkulesiHSV.jpg", hedefGoruntu); }
RGB GRAY Renk Dönüşümü
GRAY renk uzayı ile renkler, siyahın ve beyazın tonlarında yani gri olarak tanımlanır.
Imgproc.cvtColor(kaynakGoruntu, hedefGoruntu, Imgproc.COLOR_GRAY2RGB);
Sistemdeki kameradan alınan görüntü üzerine de aynı işlemi uygulayarak, akış halindeki bir görüntünün renk uzayı değiştirilebilir. Bazı renk uzayları arasındaki dönüşüm kaliteli bir sonuç vermeyebilir, her renk uzayı farklı geometrik biçimlerde ifade edilmektedir, bu ifade şekli matematiksel olarak bazı renk uzayları arasındaki dönüşüme engel teşkil etmektedir.
Ek Bilgi:
Eğer renk dönüşümünü kendiniz yapmak isterseniz; RGB bir pikselin değeri; kırmızı kanalının %30’u (0.2989), yeşil kanalın %59’u (0.5870) ve mavi kanalın %11’i (0.1144) alınarak toplanması neticesinde bulunmaktadır. Bu demek oluyor ki: GRI_SEVIYE_GORUNTU=0.2989*[1.KATMAN RED]+0.5870*[2.KATMAN GREEN]+0.1140*[3.KATMAN BLUE];