使用 OpenCV 模糊图像的Java程序
模糊是一种简单且常用的图像处理操作。它也称为平滑。 OpenCV 库提供了许多函数来应用不同的线性过滤器来平滑图像或模糊图像。
图像的平滑从图像中去除噪声像素并对图像应用低通滤波器。低通滤波器意味着从图像中去除噪声,同时不损坏图像的大部分。最常见的滤波器类型是线性的。在线性滤波器中,输入像素值的加权和决定了输出像素值。
可用于模糊图像的OpenCV 函数如下:
- 模糊()
- 高斯模糊()
- 中值模糊()
- 双边过滤器()
Return type of above functions is modified image of the same directory which is supposed to be taken as sample input image. All functions described above are as follows
方法一。 Blur() :此函数使用归一化块过滤器执行平滑。
句法:
Imgproc.blur(src, dst, new Size(i, i), new Point(-1, -1));
参数:此函数需要 4 个参数
- src:源图像
- dst:目标图像
- Size( w, h ):宽w像素、高h像素的核的大小
- Point(-1, -1):表示相对于邻域的锚点位置。如果存在负值,则内核的中心被认为是锚点。
方法 2. GaussianBlur() :此函数使用高斯滤波器执行平滑。
句法:
Imgproc.GaussianBlur(src, dst, new Size(i, i), 0, 0);
参数:此函数需要 4 个参数
- src:源图像
- dst:目标图像
- Size(w, h):要使用的内核的大小。如果 w 和 h 不是奇数和正数,则将使用 σx 和 σy 参数计算大小。
- σx, σy:x 和 y 的标准差。写入 0 意味着 σx 和 σy 是使用内核大小计算的。
方法3.medianBlur() :此函数使用中值滤波器执行平滑。
句法:
Imgproc.medianBlur(src, dst, i);
参数:此函数需要 3 个参数
- src:源图像
- dst:目标图像
- i:内核的大小。一定很奇怪。
方法4.lateralFilter() :此函数使用 双边过滤。
句法:
Imgproc.bilateralFilter(src, dst, i, i * 2, i / 2);
参数:此函数需要 5 个参数
- src:源图像
- dst:目标图像
- d:每个像素邻域的直径。
- σColor:颜色空间中的标准偏差。
- σSpace:坐标空间中的标准偏差(以像素为单位)
实现:输入图像如下,应该被模糊掉。
Java
// Importing OpenCV libraries
// to use inbuilt methods
import org.opencv.core.*;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
class GFG {
int DELAY_BLUR = 100;
int MAX_KERNEL_LENGTH = 31;
// Source Image by creating Matlab object
Mat src = new Mat();
// Destination Image by creating Matlab object
Mat dst = new Mat();
// Main driver code
public static void main(String[] args)
{
// Load the native library
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// Taking input image from directory
String filename = "D:\\InputImage.jpg";
src = Imgcodecs.imread(filename,
Imgcodecs.IMREAD_COLOR);
// 4 different methods of Imgproc class
// to blur out input image
// Method 1. Standard blur method
// using blur()
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) {
Imgproc.blur(src, dst, new Size(i, i),
new Point(-1, -1));
// Display blurred input image
displayDst(DELAY_BLUR);
}
// Method 2. Gaussian blur method
// using GaussianBlur()
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) {
Imgproc.GaussianBlur(src, dst, new Size(i, i),
0, 0);
// Display blurred input image
displayDst(DELAY_BLUR);
}
// Method 3. Median blur method
// using medianBlur()
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) {
Imgproc.medianBlur(src, dst, i);
// Display blurred input image
displayDst(DELAY_BLUR);
}
// Method 4. Bilateral filter Method
// using bilateralFilter()
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) {
Imgproc.bilateralFilter(src, dst, i, i * 2,
i / 2);
// Display blurred input image
displayDst(DELAY_BLUR);
}
}
}
输出:输出图像是对应输入图像的模糊图像: