学习c++版opencv3.4之22-霍夫圆检测

霍夫圆检测。

从直角坐标系转为极坐标系后圆心比较亮。

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace std;
using namespace cv;

Mat src, dst;
Mat gray_img;
int main(){
//    Mat src1;
//    src1 = imread("/Users/ming/Documents/test.jpg");
//    resize(src1, src, Size(src1.cols/2, src1.rows/2));
    src = imread("/Users/ming/Documents/win7logo.jpeg");
    src.copyTo(dst);
    if (!src.data){
        printf("cannot load image ...");
        return -1;
    }
    namedWindow("src img", CV_WINDOW_AUTOSIZE);
    imshow("src img", src);

    medianBlur(src, src, 3);
//    imshow("medianBulr", src);
    cvtColor(src, gray_img, CV_WINDOW_AUTOSIZE);
    Mat canny_img;
    Canny(gray_img, canny_img, 80, 200);
    imshow("canny img", canny_img);
    //霍夫圆检测
    vector<Vec3f> pcircle;
    HoughCircles(canny_img, pcircle, CV_HOUGH_GRADIENT, 1.0, 5);
//    HoughCircles(canny_img, pcircle, CV_HOUGH_GRADIENT, 1, gray_img.rows / 5, 150, 70, 0, 0);
    Scalar color = Scalar(0, 0, 255);
    for (size_t i = 0; i < pcircle.size(); i++){
        Vec3f temp = pcircle[i];
        cout<<"circle: "<< temp << endl;
        circle(dst, Point(temp[0], temp[1]), temp[2], color); //画圆
        circle(dst, Point(temp[0], temp[1]), 2, Scalar(255,0,0)); //画圆心
    }
    imshow("houghcircle", dst);

    waitKey(0);
    return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值