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);

}

结果图

 

posted @   JIAXUN  阅读(440)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示