Java DIP - Görüntü Şekli Dönüştürme
Görüntünün şekli OpenCV kullanılarak kolayca değiştirilebilir. Görüntü dört yönden herhangi birinde çevrilebilir, ölçeklenebilir veya döndürülebilir.
Görüntünün şeklini değiştirmek için görüntüyü okur ve Mat nesneye dönüştürürüz. Söz dizimi aşağıda verilmiştir -
File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
//convert Buffered Image to Mat.
Bir Görüntüyü Çevirme
OpenCV, aşağıda açıklanan üç tür çevirme koduna izin verir -
Sr.No. | Flip Kodu ve Açıklaması |
---|---|
1 | 0 0, x ekseni etrafında dönme anlamına gelir. |
2 | 1 1, y ekseni etrafında dönme anlamına gelir. |
3 | -1 -1, her iki eksen etrafında dönme anlamına gelir. |
Uygun çevirme kodunu yönteme aktarıyoruz flip() içinde Coresınıf. Söz dizimi aşağıda verilmiştir -
Core.flip(source mat, destination mat1, flip_code);
Yöntem flip() üç parametre alır - kaynak görüntü matrisi, hedef görüntü matrisi ve çevirme kodu.
Flip yönteminin yanı sıra, Core sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -
Sr.No. | Yöntem ve Açıklama |
---|---|
1 | add(Mat src1, Mat src2, Mat dst) İki dizinin veya bir dizinin ve bir skalerin öğe başına toplamını hesaplar. |
2 | bitwise_and(Mat src1, Mat src2, Mat dst) İki dizinin veya bir dizinin ve bir skalerin öğe başına bit bazında birleşimini hesaplar. |
3 | bitwise_not(Mat src, Mat dst) Bir dizinin her bitini tersine çevirir. |
4 | circle(Mat img, Point center, int radius, Scalar color) Bir daire çizer. |
5 | sumElems(Mat src) Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır. |
6 | subtract(Mat src1, Scalar src2, Mat dst, Mat mask) İki dizi veya dizi ile bir skaler arasındaki öğe başına farkı hesaplar. |
Misal
Aşağıdaki örnek, bir görüntüyü çevirmek için Core sınıfının kullanımını gösterir -
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.File;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
public class Main {
public static void main( String[] args ) {
try {
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
byte[] data = ((DataBufferByte) image.getRaster(). getDataBuffer()).getData();
Mat mat = new Mat(image.getHeight(),image.getWidth(),CvType.CV_8UC3);
mat.put(0, 0, data);
Mat mat1 = new Mat(image.getHeight(),image.getWidth(),CvType.CV_8UC3);
Core.flip(mat, mat1, -1);
byte[] data1 = new byte[mat1.rows()*mat1.cols()*(int)(mat1.elemSize())];
mat1.get(0, 0, data1);
BufferedImage image1 = new BufferedImage(mat1.cols(), mat1.rows(), 5);
image1.getRaster().setDataElements(0,0,mat1.cols(),mat1.rows(),data1);
File ouptut = new File("hsv.jpg");
ImageIO.write(image1, "jpg", ouptut);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Çıktı
Yukarıdaki örneği çalıştırdığınızda, bir görüntü adını çevirirdi digital_image_processing.jpg eşdeğer HSV renk alanı görüntüsüne göre ve sabit diske adıyla yazın flip.jpg.