电子说
我们将在本文中介绍以下高级图像处理操作:
Canny 边缘检测 :Canny 边缘检测是一种流行的边缘检测算法。它是由 John F. Canny 在 1986 年开发的。它是一个多阶段算法,我们将按如下方式经历每个阶段:
如果像素梯度值高于上限阈值,则像素被接受为边缘。
如果像素梯度值低于下限阈值,则像素被拒绝。
如果像素梯度值介于两个阈值之间,则仅当它连接到高于阈值上限的像素时才会被接受。
ImgProc类为 Canny 边缘检测提供了一个Canny方法,该方法采用以下参数:
public static Mat cannyEdges(Mat img){
Mat canny = new Mat();
Imgproc.Canny(img,canny,30,100);
return canny;
}
Canny 边缘检测
原始图像
Canny 边缘检测
双边滤波图像上的 Canny 边缘检测
注意:Canny 边缘检测算法基于梯度,因此对图像噪声高度敏感。因此,在灰度图像上应用 Canny 边缘检测是一种很好的做法。
**轮廓:**轮廓可以定义为连接沿边界具有相同强度的所有连续点的曲线。它们对于形状分析和对象检测很有用。
使用二值图像查找轮廓是一种很好的做法。二值图像是这样的图像,其中每个像素只能有两个可能的强度值(0 表示黑色,1 或 255 表示白色)。
ImgProc 类提供了一种用于生成二值图像的阈值方法,该方法使用以下参数:
public static Mat convertToBinary(Mat img){
Mat binImg = new Mat();
Imgproc.threshold(img,binImg,125 ,255,Imgproc.THRESH_BINARY);
return binImg;
}
图像转换为二进制
二进制图像
寻找轮廓:ImgProc 类提供了一个findContours方法,该方法接受以下输入参数:
public static void findAndDrawContours(Mat binImg,Mat org){
List
Imgproc.findContours(binImg,contourList,new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
Imgproc.drawContours(org, contourList, -1, new Scalar(50, 205, 50), 2);
HighGui.imshow("Contours",org);
HighGui.waitKey();
}
查找和绘制轮廓
绘制轮廓: ImgProc 类提供了一个drawContours方法,该方法使用以下参数:
轮廓
使用轮廓进行形状检测: 我们可以使用轮廓来根据近似曲线中的周长、面积和阵列点的数量来检测形状。ImgProc 类提供了一个approxPolyDP方法,该方法返回基于轮廓的近似曲线并使用以下参数:
public static void shapeDetection(Mat binImg,Mat org){
List
List
Imgproc.findContours(binImg,contourList,new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
for(int i=0;i
point.fromList(contourList.get(i).toList());
MatOfPoint2f approxCurve = new MatOfPoint2f();
double parameter = Imgproc.arcLength(point, true);
Imgproc.approxPolyDP(point, approxCurve, parameter * 0.02, true);
long total = approxCurve.total();
//Detecting Rectangle Shape
if (total == 4) {
double area = Imgproc.contourArea(contourList.get(i));
//rectangle with area greater than 500
if(area>500)
selectedContours.add(contourList.get(i));
}
}
Imgproc.drawContours(org, selectedContours, -1, new Scalar(50, 205, 50), 3);
HighGui.imshow("Contours",org);
HighGui.waitKey();
}
使用轮廓进行形状检测
全部0条评论
快来发表一下你的评论吧 !