检测步骤: 1)读入图像,灰度变换。 2)阈值二值化。 3)Canny 边缘提取。 4)霍夫变换检测直线。 实现:
Mat pLine = Cv2.ImRead("D:\\OpenCV\\Topencv\\CsharpOpenCv\\CsharpOpenCv\\3.png"); Cv2.ImShow("Line",pLine); Mat pGray = new Mat(pLine.Size(),pLine.Type()); // 霍夫直线 canny边缘提取 --> cvtcolor转灰度 --> HoughLinesP霍夫边缘检测 // 灰度变换 Cv2.CvtColor(pLine, pGray, ColorConversionCodes.RGB2GRAY); // 阈值二值化 Mat pThresholdImage = new Mat(pLine.Size(), pLine.Type()); Cv2.Threshold(pGray, pThresholdImage, 100, 255, ThresholdTypes.Binary); // Canny 边缘提取 Mat pCannyImage = new Mat(pLine.Size(), pLine.Type()); Cv2.Canny(pThresholdImage, pCannyImage, 20, 50, 3); // 霍夫变换检测直线 LineSegmentPoint[] lineSegmentPoint; //检测直线的端点的集合。LineSegmentPoint lineSegmentPoint = Cv2.HoughLinesP(pCannyImage, 1.0, Cv2.PI / 180, 200, 50, 20); // 转换为BGR图,为后面输出彩线 Cv2.CvtColor(pCannyImage, pCannyImage, ColorConversionCodes.GRAY2BGR); Scalar pLcolor = new Scalar(0, 255, 0); //绿色 BGR for (int i = 0; i < lineSegmentPoint.Length; i++) { Cv2.Line(pCannyImage, lineSegmentPoint[i].P1, lineSegmentPoint[i].P2, pLcolor, 1); //依据点集画线 } Cv2.ImShow("检测直线",pCannyImage);参考: OpenCv–霍夫直线变换(检测直线)
