别人没那么重要,我也没那么重要,好好活着,把能做的小事做好,够不到的东西就放弃,承认就好。做一个心情好能睡着的人,你所有事情都会在正轨上。

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日

------------------------------------------------------------------------------------------------------------*/

 

posted @ 2023-03-12 22:57  一路狂奔的乌龟  阅读(231)  评论(0)    收藏  举报
返回顶部