zoukankan      html  css  js  c++  java
  • opencv入门笔记之三 简单图像识别,识别线,点,圆,轮廓

    Edge detection

    int main(){
    IplImage* girl = cvLoadImage(“road.jpg”, 0);
    // convert color to grag
    Mat boy;
    //*************start******************************///
    Mat cow = Mat(girl);
    //Mat() convert IplImage to Mat
    imshow(“cow”, cow);
    Canny(cow, boy, 125, 350);
    //125< |pixel - pixel| <350 (hysteresis thresholding)
    imshow(“boy”, boy);
    Mat Inv;
    threshold(boy, Inv, 128, 255, THRESH_BINARY_INV);
    // invert color
    //*****************end**************************///
    duration = static_cast(getTickCount()) - duration;
    duration /= getTickFrequency();
    cout << duration;
    //////////////////////////////////////////////////////////////////////////
    imshow(“Inv”, Inv);
    waitKey(0);

    }

    2/5/2015 10:12 AM - Screen Clipping

    Lines detection
    Mat boundless = Mat(cvLoadImage(“road.jpg”, 0));
    //convert color to grey
    Mat bound;
    Canny(boundless, bound, 125, 350);
    vector lines;
    HoughLines(bound, lines, 1, M_PI / 180, 80);
    // if u wanna use PI there must be a #define _USE_MATH_DEFINES before math.h
    vector::const_iterator it = lines.begin();
    while (it != lines.end()){
    float rho = (*it)[0];
    float theta = (*it)[1];
    if (theta < M_PI_4||theta>3*M_PI_4)
    {
    Point pt1(rho / cos(theta), 0);
    Point pt2(rho - bound.rows*sin(theta) / cos(theta), bound.rows);
    line(boundless,pt1, pt2, Scalar(255), 1);
    }
    else
    {
    Point pt1(0, rho / sin(theta));
    Point pt2(bound.cols, rho - bound.cols*cos(theta) / sin(theta));
    line(boundless, pt1, pt2, Scalar(255), 1);
    }
    ++it;
    }
    imshow(“new”, boundless);

    Probabilistic Hough transform
    class findline
    {
    public:
    findline() :deltarho(1), deltatheta(M_PI / 180), minvote(10), minlength(0.), maxGap(0.){}
    // ~findline();
    void setAccResolution(double rho=1, double theta=M_PI/180){
    deltatheta = theta;
    deltarho = rho;
    }// smaller deltatheta and deltarho means more time and more precise
    void setMinVote(int minv){
    minvote = minv;
    }// more votes, less lines
    void setLineLengthAndGap(double length, double gap){
    minlength = length;
    maxGap = gap;
    }// gap between lines and length of lines
    vector findLines(Mat& binary){
    lines.clear();
    HoughLinesP(binary, lines, deltarho, deltatheta, minvote, minlength, maxGap);
    return lines;
    } //use probabilistic hough transform
    void drawDetectedLines(Mat &image, Scalar color=Scalar(255,255,255)){
    vector::const_iterator it2 = lines.begin();
    while(it2 != lines.end()){
    Point pt1((*it2)[0], (*it2)[1]);
    Point pt2((*it2)[2], (*it2)[3]);
    line(image, pt1, pt2, color);
    ++it2;
    }
    }// use const_iterator to draw lines

    private:
    Mat image;
    vector lines;
    double deltarho, deltatheta;
    int minvote;
    double minlength;
    double maxGap;
    };

    void m(){
    findline finder;
    finder.setMinVote(80);
    finder.setLineLengthAndGap(100, 20);
    Mat image = imread(“ground.jpg”);
    Mat coutours = Mat(cvLoadImage(“ground.jpg”, 0));
    Canny(coutours, coutours, 125, 350);
    // imshow(“hen”, coutours);
    vector lines = finder.findLines(coutours);
    finder.drawDetectedLines(image,Scalar(0,0,0));
    imshow(“Hough”, image);
    imwrite(“ok.jpg”, image);
    }

    vector

  • 相关阅读:
    array and ram
    char as int
    pointer of 2d array and address
    Install SAP HANA EXPRESS on Google Cloud Platform
    Ubuntu remount hard drive
    Compile OpenSSL with Visual Studio 2019
    Install Jupyter notebook and tensorflow on Ubuntu 18.04
    Build OpenCV text(OCR) module on windows with Visual Studio 2019
    Reinstall VirtualBox 6.0 on Ubuntu 18.04
    Pitfall in std::vector<cv::Mat>
  • 原文地址:https://www.cnblogs.com/Pomodori/p/4316620.html
Copyright © 2011-2022 走看看