canny算子
public static void testCanny(Mat image) {
Imgproc.GaussianBlur(image, image, new Size(3, 3), 0, 0);
Imgproc.cvtColor(image, image,Imgproc.COLOR_BGR2GRAY);
int lowThresh=45;
Imgproc.Canny(image, image,lowThresh, lowThresh*3,3);
HighGui.imshow("Canny", image);
}
Sobel算子
public static void testSobel(Mat image) {
//高斯滤波
Imgproc.GaussianBlur(image, image, new Size(3, 3), 0, 0)
//灰度
Imgproc.cvtColor(image, image,Imgproc.COLOR_BGR2GRAY)
//横向
Mat x = new Mat()
/*src:源图像
*dst:检测结果图像
*ddepth:输出图像的深度
*dx:x方向上的差分阶数
*dy:y方向上的差分阶数
*ksize:sobel核的大小,默认为3
*scale:缩放因子
*delta:结果存入输出图像前可选的delta值,默认为0
*borderType:边界模式,默认BORDER_DEFAULT
*
*其中,输出图像的深度,支持如下src.depth()和ddepth的组合:
*src.depth() = CV_8U ddepth =-1/CV_16S/CV_32F/CV_64F
*src.depth() = CV_16U/CV_16S ddepth =-1/CV_32F/CV_64F
*src.depth() = CV_32F ddepth =-1/CV_32F/CV_64F
*src.depth() = CV_64F ddepth = -1/CV_64F
*/
Imgproc.Sobel(image, x, CvType.CV_16S, 1, 0, 3, 1, 0, Core.BORDER_DEFAULT)
//需要用convertScaleAbs()函数将其转回原来的uint8形式,否则将无法显示图像
Core.convertScaleAbs(x, x)
HighGui.imshow("x", x)
//竖向
Mat y = new Mat()
Imgproc.Sobel(image, y, CvType.CV_16S, 0, 1, 3, 1, 0, Core.BORDER_DEFAULT)
Core.convertScaleAbs(y, y)
HighGui.imshow("y", y)
//横竖向图像融合
Mat xy = new Mat()
Core.addWeighted(x, 0.5, y, 0.5, 0, xy)
HighGui.imshow("xy", xy)
}
Scharr滤波器
public static void testScharr(Mat image) {
//高斯滤波
Imgproc.GaussianBlur(image, image, new Size(3, 3), 0, 0)
//灰度
Imgproc.cvtColor(image, image,Imgproc.COLOR_BGR2GRAY)
//横向
Mat x = new Mat()
/*src:源图像
*dst:检测结果图像
*ddepth:输出图像的深度
*dx:x方向上的差分阶数
*dy:y方向上的差分阶数
*scale:缩放因子
*delta:结果存入输出图像前可选的delta值,默认为0
*borderType:边界模式,默认BORDER_DEFAULT
*
*其中,输出图像的深度,支持如下src.depth()和ddepth的组合:
*src.depth() = CV_8U ddepth =-1/CV_16S/CV_32F/CV_64F
*src.depth() = CV_16U/CV_16S ddepth =-1/CV_32F/CV_64F
*src.depth() = CV_32F ddepth =-1/CV_32F/CV_64F
*src.depth() = CV_64F ddepth = -1/CV_64F
*/
Imgproc.Scharr(image, x, CvType.CV_16S, 1, 0,1, 0, Core.BORDER_DEFAULT)
//需要用convertScaleAbs()函数将其转回原来的uint8形式,否则将无法显示图像
Core.convertScaleAbs(x, x)
HighGui.imshow("x", x)
//竖向
Mat y = new Mat()
Imgproc.Scharr(image, y, CvType.CV_16S, 0, 1, 1, 0, Core.BORDER_DEFAULT)
Core.convertScaleAbs(y, y)
HighGui.imshow("y", y)
//横竖向图像融合
Mat xy = new Mat()
Core.addWeighted(x, 0.5, y, 0.5, 0, xy)
HighGui.imshow("xy", xy)
}
Laplace算子
public static void testLaplacian(Mat image) {
Imgproc.GaussianBlur(image, image, new Size(3, 3), 0, 0);
Imgproc.cvtColor(image, image,Imgproc.COLOR_BGR2GRAY);
Mat dst = new Mat();
Imgproc.Laplacian(image, dst, CvType.CV_16S, 3, 1, 0, Core.BORDER_DEFAULT);
Core.convertScaleAbs(dst, dst);
HighGui.imshow("Laplacian", dst);
}
Threshold(固定阈值操作)
public static void testThreshold(Mat image) {
/**
*src 是输入的函数图像
*dst 是输出的函数图像
*thresh 阈值的具体值
*maxval 阈值类型的最大值
*type 阈值类型
*THRESH_BINARY = 0,过门限的为maxval其他取零
*THRESH_BINARY_INV = 1,过门限的为取零,其他maxval
*THRESH_TRUNC = 2,过门限的取门限,其他不变
*THRESH_TOZERO = 3,过门限的不变,其他取零
*THRESH_TOZERO_INV = 4,过门限的值取零其他不变
*THRESH_MASK = 7,
*THRESH_OTSU = 8,自动生成阀值,大于阀值的为255 ,小于阀值的为0
*THRESH_TRIANGLE = 16
*/
Imgproc.cvtColor(image, image,Imgproc.COLOR_BGR2GRAY)
HighGui.imshow("gry", image)
Mat m=new Mat()
Imgproc.threshold(image, m, 120, 255, Imgproc.THRESH_BINARY)
HighGui.imshow("Threshold", m)
}
adaptiveThreshold(自适应阈值操作)
public static void testAdaptiveThreshold(Mat image) {
Imgproc.cvtColor(image, image,Imgproc.COLOR_BGR2GRAY);
Imgproc.adaptiveThreshold(image, image, 200, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 5, 9);
HighGui.imshow("adaptiveThreshold", image);
}