Форму изображения можно легко изменить с помощью OpenCV. Изображение может быть перевернуто, масштабировано или повернуто в любом из четырех направлений.
Чтобы изменить форму изображения, мы читаем изображение и конвертируем в объект Mat. Его синтаксис приведен ниже —
File input = new File("digital_image_processing.jpg"); BufferedImage image = ImageIO.read(input); //convert Buffered Image to Mat.
Листать изображение
OpenCV допускает три типа флип-кодов, которые описаны ниже —
Sr.No. | Флип-код и описание |
---|---|
1 |
0 0 означает, переворачивая вокруг оси х. |
2 |
1 1 означает, что переворачивается вокруг оси y. |
3 |
-1 -1 означает, переворачивая обе оси. |
0
0 означает, переворачивая вокруг оси х.
1
1 означает, что переворачивается вокруг оси y.
-1
-1 означает, переворачивая обе оси.
Мы передаем соответствующий flip-код в метод flip () класса Core . Его синтаксис приведен ниже —
Core.flip(source mat, destination mat1, flip_code);
Метод flip () принимает три параметра — матрицу исходного изображения, матрицу целевого изображения и код отражения.
Помимо метода flip, класс Core предоставляет и другие методы. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
добавить (Mat src1, Mat src2, Mat dst) Он рассчитывает для каждого элемента сумму двух массивов или массива и скаляра. |
2 |
bitwise_and (Mat src1, Mat src2, Mat dst) Он рассчитывает для каждого элемента побитовое соединение двух массивов или массива и скаляра. |
3 |
bitwise_not (Mat src, Mat dst) Он инвертирует каждый бит массива. |
4 |
круг (Mat img, центр точки, внутренний радиус, скалярный цвет) Это рисует круг. |
5 |
sumElems (Mat src) Размытие изображения с использованием фильтра Гаусса. |
6 |
вычитать (Mat src1, Scalar src2, Mat dst, Mat mask) Он рассчитывает разницу между элементами для двух массивов или массивов и скаляра. |
добавить (Mat src1, Mat src2, Mat dst)
Он рассчитывает для каждого элемента сумму двух массивов или массива и скаляра.
bitwise_and (Mat src1, Mat src2, Mat dst)
Он рассчитывает для каждого элемента побитовое соединение двух массивов или массива и скаляра.
bitwise_not (Mat src, Mat dst)
Он инвертирует каждый бит массива.
круг (Mat img, центр точки, внутренний радиус, скалярный цвет)
Это рисует круг.
sumElems (Mat src)
Размытие изображения с использованием фильтра Гаусса.
вычитать (Mat src1, Scalar src2, Mat dst, Mat mask)
Он рассчитывает разницу между элементами для двух массивов или массивов и скаляра.
пример
В следующем примере демонстрируется использование класса Core для переворачивания изображения.
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()); } } }
Выход
Когда вы запустите приведенный выше пример, он перевернет имя изображения digital_image_processing.jpg в его эквивалентное изображение цветового пространства HSV и запишет его на жесткий диск с именем flip.jpg .