C#opencvSharp十字定位HoughLinesP

输入路径直接调用,需改region5的mask区域,加入了模板定位和mask,主体是regionP0那里

public Point Center(string str)
{
    OpenCvSharp.Mat oriPic = Cv2.ImRead(str);
    OpenCvSharp.Mat src1 = Cv2.ImRead(str);
    Mat tempImg_path = Cv2.ImRead(operatelog.tmpicPath + "5x7.png");
    //tempImg_path = tempImg_path.Resize(new Size(tempImg_path.Width / 6, tempImg_path.Height / 6));
    OpenCvSharp.Mat gray = new OpenCvSharp.Mat(), binary = new OpenCvSharp.Mat(), vline = new OpenCvSharp.Mat();
    double wh = double.Parse(src1.Width.ToString()) / double.Parse(src1.Height.ToString());
    Size size = new Size(src1.Width / 3, (src1.Width / 3) / wh);
    gray = src1.Resize(size);
    vline = gray;
    var w = vline.Width / 3;
    var h = vline.Height / 4;

    //Cv2.ImShow("gray", gray);
    //其他
    #region 5
    OpenCvSharp.Point point17 = new OpenCvSharp.Point(w * 1.3, h * 1.75);//左上
    OpenCvSharp.Point point18 = new OpenCvSharp.Point(w * 1.75, h * 1.75);//右上
    OpenCvSharp.Point point19 = new OpenCvSharp.Point(w * 1.3, h * 2.2);//左下
    OpenCvSharp.Point point20 = new OpenCvSharp.Point(w * 1.75, h * 2.2);//右下
    #endregion

    OpenCvSharp.Point[] poi5 = { point17, point18, point20, point19 };
    List<Point[]> pListAll = new List<Point[]>() { poi5 };


    OpenCvSharp.Mat invertedMask = new OpenCvSharp.Mat();
    OpenCvSharp.Mat mask = OpenCvSharp.Mat.Zeros(vline.Size(), MatType.CV_8U);

    Cv2.DrawContours(mask, new[] { poi5 }, -1, new Scalar(255), -1);
    //Cv2.ImShow(2.ToString(), mask);
    Cv2.BitwiseAnd(vline, vline, invertedMask, mask: mask);//实现遮罩//
    //Cv2.ImShow("invertedMask", invertedMask);
    #region 模板匹配
    // 读取输入图像和模板图像
    Mat srcImage = invertedMask;
    Mat tempImage = tempImg_path;

    // 创建用于存储模板和匹配结果的图像
    Mat result = new Mat();

    // 使用模板匹配方法进行匹配,这里使用归一化相关系数匹配法
    Cv2.MatchTemplate(srcImage, tempImage, result, TemplateMatchModes.CCoeffNormed);

    // 获取匹配结果中的最小值、最大值以及对应的位置
    double minVal, maxVal;
    OpenCvSharp.Point minLoc, maxLoc;
    Cv2.MinMaxLoc(result, out minVal, out maxVal, out minLoc, out maxLoc);

    // 获取最佳匹配的位置
    OpenCvSharp.Point matchLoc = maxLoc;
    // 在输入图像上用绿色矩形框标记匹配的位置
    Cv2.Rectangle(srcImage, matchLoc, new OpenCvSharp.Point(matchLoc.X + tempImage.Cols, matchLoc.Y + tempImage.Rows), Scalar.Green, 2);

    #endr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值