C#OpenCV算子-图像分析
4.1 累计概率霍夫线变换
函数原型:
LineSegmentPoint[] HoughLinesP(InputArray image, double rho, double theta, int threshold, double minLineLength = 0, double maxLineGap = 0) /* 参数: Image:输入图像(只能输入单通道图像)。 rho:累加器的距离分辨率(以像素为单位) 生成极坐标时候的像素扫描步长。 theta:累加器的角度分辨率(以弧度为单位)生成极坐标时候的角度步长,通常取值CV_PI/180 ==1度。 threshold:累加器阈值参数。只有那些足够的行才会返回 投票(>阈值);设置认为几个像素连载一块,才能被看作是直线。 minLineLength:最小线长度,设置最小线段是有几个像素组成。 maxLineGap:同一条线上的点之间链接它们的最大容许间隙。(默认状况下是0):设置你认为像素之间。 功能: 在边缘二值图像上寻找直线 */
例子:
static void Main(string[] args) { Mat src1 = new Mat(@"C:\Users\Administrator\Desktop\1.jpg", ImreadModes.Grayscale); Mat dst = new Mat(src1.Size(), MatType.CV_8UC3, Scalar.Black); Mat Canny = new Mat(); Cv2.Canny(src1, Canny, 60, 100); LineSegmentPoint[] linePoint = Cv2.HoughLinesP(Canny, 5, 0.1, 100); Scalar color = new Scalar(0, 0, 255); for(int i =0; i < linePoint.Count(); i++) { Point p1 = linePoint[i].P1; Point p2 = linePoint[i].P2; Cv2.Line(dst, p1, p2, color, 1); } Cv2.NamedWindow("test", WindowMode.FreeRatio); Cv2.ImShow("test", dst); Cv2.WaitKey(); }
实验样例:
|
src1 |
dst |
|
|
|
4.2 霍夫圆变换
函数原型:
CircleSegment[] HoughCircles(InputArray image, HoughMethods method, double dp, double minDist, double param1 = 100, double param2 = 100, int minRadius = 0, int maxRadius = 0) /* 参数: Image:输入图像(8位、单通道、灰度输入图像)。 Method:实现方法:目前,唯一的实现方法是HoughCirclesMethod.Gradient。 dp:累加器分辨率与图像分辨率的反比。默认=1 minDist: 检测到的圆的中心之间的最小距离。 param1:第一个方法特定的参数。[默认值是100] canny边缘检测阈值低。 param2:第二个方法特定于参数。[默认值是100] 中心点累加器阈值 – 候选圆心。 minRadius:最小半径。 maxRadius:最大半径。 功能: 在灰度单通道图像上个寻找圆 */
例子:
static void Main(string[] args) { Mat src1 = new Mat(@"C:\Users\Administrator\Desktop\1.jpg"); Mat dst = new Mat(); Cv2.MedianBlur(src1, src1, 3); src1.CopyTo(dst); Cv2.CvtColor(src1, src1, ColorConversionCodes.RGB2GRAY); CircleSegment[] circle = Cv2.HoughCircles(src1, HoughMethods.Gradient, 1, 90, 100, 50, 10); Scalar color = new Scalar(0, 0, 255); for(int i =0; i < linePoint.Count(); i++) { Cv2.Circle(dst, (int)circle[i].Center.X, (int)circle[i].Center.Y, (int)circle[i].Radius, color, 2); } Cv2.ImShow("test", dst); Cv2.WaitKey(); }
实验样例:
|
Src1 |
dst |
|
|
|
4.3 Canny边缘检测
函数原型:
void Canny(InputArray src, OutputArray edges, double threshold1, double threshold2, int apertureSize = 3, bool L2gradient = false) /* 参数: src:输入图像. edges:输出边缘图像. threshold1:阈值1. threshold2:阈值2. apertureSize:Sober算子大小. L2gradient:是否采用更精确的方式计算图像精度. 功能: 通过Canny边缘检测算法,获得边缘图像。 */
例子:
Canny边缘检测 static void Main(string[] args) { Mat src1 = new Mat(@"C:\Users\Administrator\Desktop\1.jpg"); Mat dst = new Mat(); Cv2.Canny(src1, dst, 100, 200); Cv2.ImShow("test", dst); Cv2.WaitKey(); }
实验样例:
|
Src1 |
dst |
|
|
|
/*-------------------------------------------------------------------------------------------------------
笔者说明:
该笔记来源于本人学习OpenCvSharp时的资料,
分享出来只是为了供大家学习,并且为了自己以后想要用的时候方便寻找。
时间:2023年3月12日
------------------------------------------------------------------------------------------------------------*/

OpenSharp算子-图像分析






浙公网安备 33010602011771号