OpenCV Dosya Sisteminden Görüntü Okuma

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);