zoukankan      html  css  js  c++  java
  • opencv3寻找最小包围矩形在图像中的应用-滚动条

     1 #include<opencv2/opencv.hpp>
     2 #include<iostream>
     3 #include<vector>
     4 
     5 using namespace cv;
     6 using namespace std;
     7 
     8 int g_nMinThred = 128, g_nMaxThred = 255;
     9 int g_nThick = 0;
    10 
    11 int main()
    12 {
    13     Mat srcImage = imread("group.jpg");
    14 
    15     namedWindow("【原图】", 0);
    16     imshow("【原图】", srcImage);
    17 
    18     createTrackbar("minthred", "【原图】", &g_nMinThred, 255, 0);
    19     createTrackbar("maxthred", "【原图】", &g_nMaxThred, 255, 0);
    20     createTrackbar("thick", "【原图】", &g_nThick, 100, 0);
    21 
    22     //先对图像进行空间的转换(为了之后要提取二值图像)
    23     Mat grayImage;
    24     cvtColor(srcImage, grayImage, CV_BGR2GRAY);
    25     //对图像进行滤波,达到较好的效果
    26     GaussianBlur(grayImage, grayImage, Size(3, 3), 0, 0);
    27     imshow("【滤波后的图像】", grayImage);
    28 
    29     char key;
    30     while (1)
    31     {
    32         //用边缘检测的方式获取二值图像
    33         Mat cannyImage;
    34         Canny(grayImage, cannyImage, g_nMinThred, g_nMaxThred, 3);
    35 
    36         //在二值图像中提取轮廓
    37         vector<vector<Point>> contours;
    38         vector<Vec4i> hierarchy;
    39         findContours(cannyImage, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
    40 
    41         //对每个轮廓的点集 找逼近多边形
    42         vector<vector<Point>> approxPoint(contours.size());
    43         for (int i = 0; i < (int)contours.size(); i++)
    44         {
    45             //rectPoint变量中得到了矩形的四个顶点坐标
    46             RotatedRect rectPoint = minAreaRect(contours[i]);
    47             //定义一个存储以上四个点的坐标的变量
    48             Point2f fourPoint2f[4];
    49             //将rectPoint变量中存储的坐标值放到 fourPoint的数组中
    50             rectPoint.points(fourPoint2f);
    51 
    52             //根据得到的四个点的坐标  绘制矩形
    53             for (int i = 0; i < 3; i++)
    54             {
    55                 line(cannyImage, fourPoint2f[i], fourPoint2f[i + 1]
    56                     , Scalar(255, 255, 255), g_nThick);
    57             }
    58             line(cannyImage, fourPoint2f[0], fourPoint2f[3]
    59                 , Scalar(255, 255, 255), g_nThick);
    60         }
    61 
    62         imshow("【绘制后的图像】", cannyImage);
    63 
    64         key = waitKey(1);
    65         if (key == 27)
    66             break;
    67     }
    68 
    69     return 0;
    70 }

     
    0
  • 相关阅读:
    微博短地址识别正则表达式
    VM 虚拟机, linux mount windows的共享目录,php报错:Fatal error: Unknown: Failed opening required
    新贵 轻雅 100 数字键 numlock问题
    [转]人大常委会委员:文理分科降低民族整体素质
    NTFS变RAW后的修复
    西门子plc视频教程
    ProE 工程图教程系列3 Pro/E消息区域中错误、警告消息的处理
    奥运会上同时升起三面五星红旗
    亦歌 在线听歌网站
    [转]国内外常用钢号对照表
  • 原文地址:https://www.cnblogs.com/waw/p/5580078.html
Copyright © 2011-2022 走看看