zoukankan      html  css  js  c++  java
  • Opencv 图片边缘检测和最小外接矩形

     1 #include "core/core.hpp"
     2 #include "highgui/highgui.hpp"
     3 #include "imgproc/imgproc.hpp"
     4 #include "iostream"
     5 #include "cmath"
     6 using namespace std;
     7 using namespace cv;
     8 
     9 int main(int argc,char *argv[])
    10 {
    11 
    12     Mat imageOut=imread(argv[1],1);
    13     Mat imageSource=imread(argv[1],0);
    14     Mat image;
    15     blur(imageSource,image,Size(3,3));
    16     threshold(image,image,0,255,CV_THRESH_OTSU);
    17 
    18     //寻找最外层轮廓
    19     vector<vector<Point> > contours;
    20     vector<Vec4i> hierarchy;
    21     findContours(image,contours,hierarchy,RETR_EXTERNAL,CHAIN_APPROX_NONE,Point());
    22     Mat imageContours=Mat::zeros(image.size(),CV_8UC1);    //最小外接矩形画布
    23 
    24     Mat imageTemp=imread("C:\Users\Administrator\Desktop\Rec\temp.png",1);  //读一个大小一样的白图
    25 
    26     for(int i=0; i<contours.size(); i++)
    27     {
    28         //cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl;
    29         //绘制轮廓
    30         drawContours(imageContours,contours,i,Scalar(0,0,0),1,8,hierarchy);
    31 
    32         //cout<<"*"<<i<<" "<<contours.size()<<endl;
    33         //绘制轮廓的最小外结矩形
    34         RotatedRect rect=minAreaRect(contours[i]);
    35         Point2f P[4];
    36         rect.points(P);
    37         if(!(P[1].x==P[0].x && P[2].x==P[3].x && P[1].y==P[2].y && P[0].y==P[3].y
    38            && P[0].y-P[1].y>0 && P[3].x-P[0].x>0 ))
    39            continue;
    40 
    41         for(int j=0; j<=3; j++)
    42         {
    43             line(imageSource,P[j],P[(j+1)%4],Scalar(0,0,0),2);       //二值图绘线
    44             line(imageOut,P[j],P[(j+1)%4],Scalar(0,0,0),2);          //原图绘线
    45             line(imageTemp,P[j],P[(j+1)%4],Scalar(0,0,0),2);         //白图
    46         }
    47 
    48         //system("pause");
    49     }
    50     cout<<"!";
    51     imwrite("C:\Users\Administrator\Desktop\Rec\new1.png", imageSource);
    52     imwrite("C:\Users\Administrator\Desktop\Rec\new2.png", imageOut);
    53     imwrite("C:\Users\Administrator\Desktop\Rec\new3.png", imageTemp);
    54     //imshow("MinAreaRect",imageSource);//
    55     waitKey(0);
    56     return 0;
    57 }

    24行 读一个白图目的是生成一个只含有矩形框的图片,不需要可以删掉

    这样存在的问题是非连通区域不会合并成一个矩形,下一步需要一个合并算法

  • 相关阅读:
    如何在外部获取当前A标签的ID值
    获取<a>标签值</a>的标签值及更改
    Mysql : Maximum execution time of 30 seconds exceeded
    Ajax+PHP实现的进度条--实例
    HTML控件 隐藏
    Ajax学习--理解 Ajax 及其工作原理
    XMLHttpRequest 对象属性参数参考
    七、smarty--缓存的控制
    六、smarty-缓存控制前的页面静态化原理
    Java 的 List 与 Scala 的 Seq 相互转换
  • 原文地址:https://www.cnblogs.com/dzzy/p/9257735.html
Copyright © 2011-2022 走看看