Java DIP - OpenCV Renk Alanı Dönüşümü
OpenCV kullanarak bir görüntünün renk uzayını diğerine değiştirmek için, görüntüyü BufferedImage ve onu dönüştür MatNesne. 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.
OpenCv, tümü Imgproc sınıfında bulunabilen birçok renk dönüştürme türüne izin verir. Türlerden bazıları kısaca açıklanmıştır -
Sr.No. | Renk Dönüştürme Türü |
---|---|
1 | COLOR_RGB2BGR |
2 | COLOR_RGB2BGRA |
3 | COLOR_RGB2GRAY |
4 | COLOR_RGB2HLS |
5 | COLOR_RGB2HSV |
6 | COLOR_RGB2Luv |
7 | COLOR_RGB2YUV |
8 | COLOR_RGB2Lab |
Herhangi bir renk dönüştürme türünden, uygun olanı yönteme geçirmeniz yeterlidir. cvtColor() içinde Imgprocsınıf. Söz dizimi aşağıda verilmiştir -
Imgproc.cvtColor(source mat, destination mat1, Color_Conversion_Code);
Yöntem cvtColor() kaynak görüntü matrisi, hedef görüntü matrisi ve renk dönüştürme türü olmak üzere üç parametre alır.
CvtColor () yönteminden ayrı olarak, Imgproc 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 | cvtColor(Mat src, Mat dst, int code, int dstCn) Bir görüntüyü bir renk uzayından diğerine dönüştürür. |
2 | dilate(Mat src, Mat dst, Mat kernel) Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir. |
3 | equalizeHist(Mat src, Mat dst) Gri tonlamalı bir görüntünün histogramını eşitler. |
4 | filter2D(Mat src, Mat dst, int ddepth, Mat kernel, Point anchor, double delta) Çekirdek ile bir görüntüyü birleştirir. |
5 | GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX) Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır. |
6 | integral(Mat src, Mat sum) Bir görüntünün integralini hesaplar. |
Misal
Aşağıdaki örnek, bir görüntüyü bir renk uzayından diğerine dönüştürmek için Imgproc 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);
Imgproc.cvtColor(mat, mat1, Imgproc.COLOR_RGB2HSV);
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ı
Verilen örneği yürüttüğünüzde, bir görüntü adını dönüştürür digital_image_processing.jpg eşdeğer HSV renk alanı görüntüsüne göre ve sabit diske adıyla yazar hsv.jpg.