📅  最后修改于: 2020-11-23 03:45:08             🧑  作者: Mango
金字塔是对图像进行的操作,
首先使用特定的平滑滤波器(例如:高斯,拉普拉斯滤波器)对输入图像进行平滑处理,然后对平滑后的图像进行二次采样。
重复此过程多次。
在金字塔操作期间,图像的平滑度增加,分辨率(大小)减小。
在“金字塔向上”中,首先对图像进行上采样,然后再进行模糊处理。您可以使用imgproc类的pyrUP()方法对图像执行Pyramid Up操作。以下是此方法的语法-
pyrUp(src, dst, dstsize, borderType)
此方法接受以下参数-
src – Mat类的一个对象,代表源(输入)图像。
mat – Mat类的一个对象,代表目标(输出)图像。
size – Size类的对象,代表要放大或缩小图像的尺寸。
borderType-整数类型的变量,表示要使用的边框类型。
以下程序演示了如何对图像执行Pyramid Up操作。
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class PyramidUp {
public static void main( String[] args ) {
// Loading the OpenCV core library
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// Reading the Image from the file and storing it in to a Matrix object
String file ="E:/OpenCV/chap13/pyramid_input.jpg";
Mat src = Imgcodecs.imread(file);
// Creating an empty matrix to store the result
Mat dst = new Mat();
// Applying pyrUp on the Image
Imgproc.pyrUp(src, dst, new Size(src.cols()*2, src.rows()*2), Core.BORDER_DEFAULT);
// Writing the image
Imgcodecs.imwrite("E:/OpenCV/chap13/pyrUp_output.jpg", dst);
System.out.println("Image Processed");
}
}
假设以下是上述程序中指定的输入图像pyramid_input.jpg 。
在执行程序时,您将获得以下输出-
Image Processed
如果打开指定的路径,则可以观察到输出图像,如下所示:
在Pyramid Down中,图像最初会模糊,然后进行下采样。您可以使用imgproc类的pyrDown()方法对图像执行Pyramid Down操作。以下是此方法的语法-
pyrDown(src, dst, dstsize, borderType)
此方法接受以下参数-
src – Mat类的一个对象,代表源(输入)图像。
mat – Mat类的一个对象,代表目标(输出)图像。
size – Size类的对象,代表要放大或缩小图像的尺寸。
borderType-整数类型的变量,表示要使用的边框类型。
以下程序演示了如何对图像执行Pyramid Down操作。
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class PyramidDown {
public static void main( String[] args ) {
// Loading the OpenCV core library
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// Reading the Image from the file and storing it in to a Matrix object
String file ="E:/OpenCV/chap13/pyramid_input.jpg";
Mat src = Imgcodecs.imread(file);
// Creating an empty matrix to store the result
Mat dst = new Mat();
// Applying pyrDown on the Image
Imgproc.pyrDown(src, dst, new Size(src.cols()/2, src.rows()/2),
Core.BORDER_DEFAULT);
// Writing the image
Imgcodecs.imwrite("E:/OpenCV/chap13/pyrDown_output.jpg", dst);
System.out.println("Image Processed");
}
}
假设以下是上述程序中指定的输入图像pyramid_input.jpg 。
在执行程序时,您将获得以下输出-
Image Processed
如果打开指定的路径,则可以观察到输出图像,如下所示:
在均值平移金字塔运算中,执行图像均值平移分割的初始步骤。
您可以使用imgproc类的pyrDown()方法对图像执行金字塔均值平移滤波操作。以下是此方法的语法。
pyrMeanShiftFiltering(src, dst, sp, sr)
此方法接受以下参数-
src – Mat类的一个对象,代表源(输入)图像。
mat – Mat类的一个对象,代表目标(输出)图像。
sp-类型为double的变量,表示空间窗口半径。
sr-代表颜色窗口半径的double类型的变量。
以下程序演示了如何对给定图像执行均值平移滤波操作。
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class PyramidMeanShift {
public static void main( String[] args ) {
// Loading the OpenCV core library
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// Reading the Image from the file and storing it in to a Matrix object
String file ="E:/OpenCV/chap13/pyramid_input.jpg";
Mat src = Imgcodecs.imread(file);
// Creating an empty matrix to store the result
Mat dst = new Mat();
// Applying meanShifting on the Image
Imgproc.pyrMeanShiftFiltering(src, dst, 200, 300);
// Writing the image
Imgcodecs.imwrite("E:/OpenCV/chap13/meanShift_output.jpg", dst);
System.out.println("Image Processed");
}
}
假设以下是上述程序中指定的输入图像pyramid_input.jpg 。
在执行程序时,您将获得以下输出-
Image Processed
如果打开指定的路径,则可以观察到输出图像,如下所示: