C#中opencv利用霍夫检测找线
/////声明变量
//原始图像
Mat img;
//canny边缘提取参数
public double cannyThreshold1; //canny参数阈值1
public double cannyThreshold2; //canny参数阈值2
//霍夫直线检测参数
public double rho; //距离r的精度,一般情况下使用精度1
public int theta; //角度θ的精度,搜索可能的角度
public int threshold; //阈值,值越小判定的直线越多,值越大判定的直线越少
public double minLineLength; //直线的最小长度,低于设定值的将忽略
public double maxLineGap; //共线点连接最大距离,距离高于设定值的两点将不进行连接
public int _apertureSize; //sobel滤波器核大小,如:3 * 3
//Roi区域
public Rectangle rectangle;
---------------------------------------------------------------------------------------
public void Find()
{
Mat imgCopy = new Mat();
img.CopyTo(imgCopy); //深拷贝,不改变原图
//创建感兴趣区域
Rect rect = new Rect(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
//裁剪图像
Mat roiImage = new Mat();
roiImage = imgCopy[rect];
//图像转灰
Mat gray = new Mat();
Cv2.CvtColor(roiImage, gray, ColorConversionCodes.BGR2GRAY);
#region 提取轮廓
Mat edges = new Mat();
Cv2.Canny(/*thresholdIMG*/gray, edges, cannyThreshold1, cannyThreshold2, apertureSize: _apertureSize);
#endregion
#region 直线检测
LineSegmentPoint[] lines;
//霍夫直线检测(返回的数组中每一个元素中包含两个点的坐标值,直线的起点和结束点,构成一条直线)
lines = Cv2.HoughLinesP(edges, rho, Math.PI / theta, threshold, minLineLength, maxLineGap);
for (int i = 0; i < lines.Length; i++)
{
//坐标转换(转换成相对于原图的坐标)
lines[i].P1.X = lines[i].P1.X + rectangle.X;
lines[i].P1.Y = lines[i].P1.Y + rectangle.Y;
lines[i].P2.X = lines[i].P2.X + rectangle.X;
lines[i].P2.Y = lines[i].P2.Y + rectangle.Y;
//画出找到的线
Cv2.Line(imgCopy, lines[i].P1, lines[i].P2, new Scalar(0, 255, 0, 255), 3);
MessageBox.Show(String.Format("row1:{0} col1:{1} row2:{2} col2:{3}", lines[i].P1.X.ToString(), lines[i].P1.Y.ToString(), lines[i].P2.X.ToString(), lines[i].P2.Y.ToString()));
}
#endregion
MessageBox.Show(lines.Length.ToString());
pictureBox.Image = BitmapConverter.ToBitmap(imgCopy);
}
结果图
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~