Dosya Sisteminden Görüntü Okuma
OpenCV ile dosya sisteminden görüntü dosyası okumak için Imgcodecs paketi içerisindeki imread metodu kullanılmaktadır. Bu konu öncesinde önemli bir sınıf olan Mat sınıfına göz atalım.
Mat tipi olarak da adlandırabileceğimiz bu sınıf, görüntü barındırma işlevine sahiptir. Okunan görüntü dosyaları OpenCV kütüphanesin de mat sınıfında tutulmaktadır. Alınan görüntü renk uzayına göre farklı boyutlarda olabilecek dizi haline getirilerek bu tip içerisinde tutulur.
Bir örnek yapalım ve dosya sisteminden görüntü okuyarak bunu mat tipi içerisinde tutalım.
import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.imgcodecs.Imgcodecs; public class Giris { public static void main(String[] args) { //sistem kütüphanesini yükleme System.loadLibrary(Core.NATIVE_LIBRARY_NAME); //görüntüyü barındıracak nesne Mat imageArray; //görüntü dosyasını oku imageArray=Imgcodecs.imread("C:\\Users\\mesutpiskin\\resim.jpg"); //mat nesnesinin satır ve sutun sayısı System.out.println(imageArray.rows()); System.out.println(imageArray.cols()); } }
OpenCV kütüphanesini kullanmak için native kütüphaneyi yüklememiz gerekmekte, bunun için loadLibrary metotu ile bu işlemi yapıyoruz. Bir adet mat nesnesi tanımlıyoruz bu nesne ile okunacak olan görüntüyü üzerinde işlem yapmak için barındırabileceğiz. Imgcodecs.imread ile parametre olarak bulunduğu dosya adresi verilen resim.jpg resmini okuyoruz. Okunan bu resim dosyasını dijital olarak imageArray mat nesnesi tutmaktadır, artık bu nesne üzerinden o görüntüye ulaşabiliriz. Resim dosyası okunduğunda bu resmin eni ve boyu kadar mat nesnesi boyutlandırılır ve satır, sütün sayısını yazdırdığımızda resmin satır sütun sayısını elde edebiliriz, satır ve sütun çarpımı ise kaç adet piksele (hücreye) sahip olduğunu gösterecektir.
Yukarıdaki örneği OpenCV 3.x sürümü yerine OpenCV 2.x sürümü ile gerçekleştirecek olursak değişen tek şey imread metodunu çağırdığımız sınıf olacaktır. OpenCV 2.x sürümü görüntü okuma, yazma işlemleri Highgui ile yapılmaktaydı, 3.x sürümü ile birlikte bunlar Imgcodecs içerisine taşınmıştır.
import org.opencv.highgui.*; ... imageArray=Highgui.imread("C:\\Users\\mesutpiskin\\resim.jpg"); ...
Video Dosyası Okuma
Aynı yöntemle video dosyasını okumak için aşağıdaki gibi bir örnek yapalım. Video okurken dikkat etmeniz gereken konu videonun codec’i dir.Aşağıdaki örnek gösterilen video dosyasındaki 100 frame i resim olarak dosya sistemine yazmaktadır.
package com.mesutpiskin; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.videoio.VideoCapture; //OpenCV 3.1 public class VideoDosyasiOkumaOrnegi{ public static void main(String[] args){ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Mat frame = new Mat(); VideoCapture videoCapture = new VideoCapture(); // Video dosyasını aç videoCapture.open("C:\\Users\\mesutpiskin\\Documents\\videodosyasi.avi"); int i = 0; // ağlantı açıldı ise if (videoCapture.isOpened()) { // Videodan 100 adet frame oku while (i < 100) { // Frame okunabildi ise if (videoCapture.read(frame)) { // Dosya sistemine yaz Imgcodecs.imwrite("C:\\Users\\mesutpiskin\\Desktop\\" + i + ".jpg", frame); System.out.println("İşlem tamamlandı." + i); i++; } } } } }
Python
import cv2 resim1 = cv2.imread("Resim1.jpg") cv2.imshow("Resim",resim1);