深圳网站建设建设,白水网站建设,wordpress html代码,成都开发微信小程序Java OpenCV 图像处理41 图形图像 图片缩放 1 图片缩放2 仿射变换3 透视变换 1 图片缩放
Java OpenCV 代码 OpenCV 提供的主要图像缩放函数#xff0c;可以指定缩放比例或者目标尺寸。
Imgproc.resize(src, dst, new Size(width, height), fx, fy, interpolation);Imgproc.r… Java OpenCV 图像处理41 图形图像 图片缩放 1 图片缩放2 仿射变换3 透视变换 1 图片缩放
Java OpenCV 代码 OpenCV 提供的主要图像缩放函数可以指定缩放比例或者目标尺寸。
Imgproc.resize(src, dst, new Size(width, height), fx, fy, interpolation);Imgproc.resize 参数解释src原图像。dst输出图像。Size(width, height)目标尺寸。如果指定了这个参数fx 和 fy 将被忽略。fx水平方向的缩放比例。fy垂直方向的缩放比例。interpolation插值方法。
interpolation 参数解释Imgproc.INTER_NEAREST最近邻插值。Imgproc.INTER_LINEAR双线性插值默认。Imgproc.INTER_AREA使用像素区域关系进行重采样通常用于缩小图像。Imgproc.INTER_CUBIC4x4像素邻域的双三次插值。Imgproc.INTER_LANCZOS48x8像素邻域的 Lanczos 插值。
package com.xu.opencv.image;import java.io.File;import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;/*** author hyacinth*/
public class ImageResize {static {String os System.getProperty(os.name);String type System.getProperty(sun.arch.data.model);if (os.toUpperCase().contains(WINDOWS)) {File lib;if (type.endsWith(64)) {lib new File(lib\\opencv\\x64\\ System.mapLibraryName(opencv_java490));} else {lib new File(lib\\opencv\\x86\\ System.mapLibraryName(opencv_java490));}System.load(lib.getAbsolutePath());}}public static void main(String[] args) {String path C:\\Users\\xuyq\\Desktop\\2.jpg;resize1(path);}public static void resize1(String path) {Mat src Imgcodecs.imread(path);Mat dst new Mat();// 定义目标图像的尺寸Size size new Size(300, 300);// 使用双线性插值进行缩放Imgproc.resize(src, dst, size, 0, 0, Imgproc.INTER_LINEAR);HighGui.imshow(src, src);HighGui.imshow(dst, dst);HighGui.waitKey();}}2 仿射变换
Java OpenCV 代码 通过仿射变换矩阵进行缩放可以同时进行旋转、平移等操作。
Mat affineMatrix Imgproc.getAffineTransform(srcPoints, dstPoints);
Imgproc.warpAffine(src, dst, affineMatrix, new Size(width, height));Imgproc.getAffineTransform 参数解释srcPoints原图像中的三个点。dstPoints目标图像中的三个点。
package com.xu.opencv.image;import java.io.File;import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.Point;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;/*** author hyacinth*/
public class ImageResize {static {String os System.getProperty(os.name);String type System.getProperty(sun.arch.data.model);if (os.toUpperCase().contains(WINDOWS)) {File lib;if (type.endsWith(64)) {lib new File(lib\\opencv\\x64\\ System.mapLibraryName(opencv_java490));} else {lib new File(lib\\opencv\\x86\\ System.mapLibraryName(opencv_java490));}System.load(lib.getAbsolutePath());}}public static void main(String[] args) {String path C:\\Users\\xuyq\\Desktop\\2.jpg;resize2(path);}public static void resize2(String path) {Mat src Imgcodecs.imread(path);Mat dst new Mat();// 定义原图像中的三个点Point[] srcPoints {new Point(0, 0), new Point(src.cols() - 1, 0), new Point(0, src.rows() - 1)};// 定义目标图像中的三个点Point[] dstPoints {new Point(0, src.rows() * 0.33), new Point(src.cols() * 0.85, src.rows() * 0.25), new Point(src.cols() * 0.15, src.rows() * 0.7)};// 将源点数组转换为 MatOfPoint2fMatOfPoint2f srcMat new MatOfPoint2f(srcPoints);// 将目标点数组转换为 MatOfPoint2fMatOfPoint2f dstMat new MatOfPoint2f(dstPoints);// 计算仿射变换矩阵Mat affineMatrix Imgproc.getAffineTransform(srcMat, dstMat);// 应用仿射变换Imgproc.warpAffine(src, dst, affineMatrix, new Size(src.cols(), src.rows()));HighGui.imshow(src, src);HighGui.imshow(dst, dst);HighGui.waitKey();}} 3 透视变换
Java OpenCV 代码 用于更复杂的变换包括缩放和透视校正。
Mat perspectiveMatrix Imgproc.getPerspectiveTransform(srcPoints, dstPoints);
Imgproc.warpPerspective(src, dst, perspectiveMatrix, new Size(width, height));
Imgproc.getPerspectiveTransform 参数解释srcPoints原图像中的四个点。dstPoints目标图像中的四个点。
package com.xu.opencv.image;import java.io.File;import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.Point;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;/*** author hyacinth*/
public class ImageResize {static {String os System.getProperty(os.name);String type System.getProperty(sun.arch.data.model);if (os.toUpperCase().contains(WINDOWS)) {File lib;if (type.endsWith(64)) {lib new File(lib\\opencv\\x64\\ System.mapLibraryName(opencv_java490));} else {lib new File(lib\\opencv\\x86\\ System.mapLibraryName(opencv_java490));}System.load(lib.getAbsolutePath());}}public static void main(String[] args) {String path C:\\Users\\xuyq\\Desktop\\2.jpg;resize3(path);}public static void resize3(String path) {Mat src Imgcodecs.imread(path);Mat dst new Mat();// 定义原图像中的四个点Point[] srcPoints {new Point(0, 0), new Point(src.cols() - 1, 0), new Point(src.cols() - 1, src.rows() - 1), new Point(0, src.rows() - 1)};// 定义目标图像中的四个点Point[] dstPoints {new Point(src.cols() * 0.05, src.rows() * 0.33), new Point(src.cols() * 0.9, src.rows() * 0.25), new Point(src.cols() * 0.8, src.rows() * 0.9), new Point(src.cols() * 0.2, src.rows() * 0.7)};// 将源点数组转换为 MatOfPoint2fMatOfPoint2f srcMat new MatOfPoint2f(srcPoints);// 将目标点数组转换为 MatOfPoint2fMatOfPoint2f dstMat new MatOfPoint2f(dstPoints);// 计算透视变换矩阵Mat perspectiveMatrix Imgproc.getPerspectiveTransform(srcMat, dstMat);// 应用透视变换Imgproc.warpPerspective(src, dst, perspectiveMatrix, new Size(src.cols(), src.rows()));HighGui.imshow(src, src);HighGui.imshow(dst, dst);HighGui.waitKey();}}