• 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
  • 相关阅读:
    jenkins自动化部署前端项目
    jenkins自动部署java项目
    Jenkins插件修改为国内源
    jenkins搭建以及初始化
    gitlab-ci集成sonarqube完成代码检测
    微信小程序模板消息后端代码
    解决上传图片到服务器 水印文字显示框框不显示文字的问题
    ES transport client使用
    签发的用户认证token超时刷新策略
    api权限管理系统与前后端分离实践
  • 原文地址:https://www.cnblogs.com/waw/p/5580078.html
Copyright © 2020-2023  润新知