零基础Opencv学习(三)

概述:主要目的是为了在图像中获取所需要的特征信息,比如直线或者圆等

一、标准霍夫变换 

      cv::Mat midImage, dstImage;
      /// 边缘检测 转化灰度图
      cv::Canny(image, midImage, 50, 200, 3);
      cv::cvtColor(midImage, dstImage, CV_GRAY2BGR);
      /// 进行霍夫线变换
      std::vector<cv::Vec2f> lines; ///存放得到线段矢量集合
      cv::HoughLines(midImage, lines, 1, CV_PI/180, 150, 0, 0);
      /// 绘制每条线段
      for(int i = 0; i<lines.size(); i++)
      {
          float rho = lines[i][0], theta = lines[i][1];
          cv::Point pt1, pt2;
          double a = cos(theta), b = sin(theta);
          double x0 = a*rho, y0 = b*rho;
          pt1.x = cvRound(x0 + 1000*(-b));
          pt1.y = cvRound(y0 + 1000*(a));
          pt2.x = cvRound(x0-1000*(-b));
          pt2.y = cvRound(y0-1000*(a));
          cv::line(dstImage, pt1, pt2, cv::Scalar(0, 255, 0), 1, cv::LINE_AA);
      }

      cv::imshow("midImage", midImage);
      cv::imshow("dstImage", dstImage);

二、累计概率霍夫变换

      cv::Mat midImage, dstImage;

      /// 边缘检测 转化灰度图
      cv::Canny(image, midImage, 50, 200, 3);
      cv::cvtColor(midImage, dstImage, CV_GRAY2BGR);

      /// 霍夫线变换
      std::vector<cv::Vec4i> lines; ///存放得到线段矢量集合
      cv::HoughLinesP(midImage, lines, 1, CV_PI/180, 80, 50, 10);

      /// 绘制每条线段
      for(int i = 0; i<lines.size(); i++)
      {
          cv::Vec4i l = lines[i];

          cv::line(dstImage, cv::Point(l[0], l[1]), cv::Point(l[2], l[3]),cv::Scalar(0, 255, 0),1, cv::LINE_AA);
      }

      cv::imshow("midImage", midImage);
      cv::imshow("dstImage", dstImage);

总结:两种效果都不好,可能是我的图片太复杂了

三、直方图均衡化

    cv::Mat dstImage;
    cv::cvtColor(image, dstImage, cv::COLOR_BGR2GRAY);

    /// 直方图均衡化
    cv::equalizeHist(dstImage, dstImage);
    cv::imshow("dstImage", dstImage);

好了,后面学习图像轮廓与分割

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风逐流wrx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值