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
时间: 2024-11-09 12:33:11

opencv3寻找最小包围矩形在图像中的应用-滚动条的相关文章

matlab练习程序(最小包围矩形)

又是计算几何,我感觉最近对计算几何上瘾了. 当然,工作上也会用一些,不过工作上一般直接调用boost的geometry库. 上次写过最小包围圆,这次是最小包围矩形,要比最小包围圆复杂些. 最小包围矩形可不一定是个直立的矩形,也可能像下图一样是倾斜的. 求法如下: 1.求多边形凸包,这里凸包直接调用系统函数了,细节可以参考这里,虽然当时写的不怎么样. 2.将凸包两个相邻的点连线作为矩形一条边. 3.寻找凸包上距离已得到的边最远的点,过该点做平行线,得到矩形第二条边. 4.将凸包上点向已求得的边投影

opencv 模板匹配,在图像中寻找物体

使用模板匹配在图像中寻找物体 模板匹配 模板匹配就是用来在大图中找小图,也就是说在一副图像中寻找另外一张模板图像的位置: opencv中用 cv.matchTemplate() 实现模板匹配. 模板匹配的原理其实很简单,就是不断地在原图中移动模板图像去比较,有6种不同的比较方法,详情可参考:TemplateMatchModes 1. 平方差匹配CV_TM_SQDIFF:用两者的平方差来匹配,最好的匹配值为0 2. 归一化平方差匹配CV_TM_SQDIFF_NORMED 3. 相关匹配CV_TM_

Halcon学习之六:获取Image图像中Region区域的特征参数

area_center_gray ( Regions, Image : : : Area, Row, Column )    计算Image图像中Region区域的面积Area和重心(Row,Column). cooc_feature_image ( Regions, Image : : LdGray, Direction : Energy,Correlation, Homogeneity, Contrast )   计算共生矩阵和推导出灰度特征值 Direction:灰度共生矩阵计算的方向  

opencv学习之路(26)、轮廓查找与绘制(五)——最小外接矩形

一.简介 二.轮廓最小外接矩形的绘制 1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 4 void main() 5 { 6 //轮廓最小外接矩形的绘制 7 Mat srcImg = imread("E://00.png"); 8 Mat dstImg = srcImg.clone(); 9 cvtColor(srcImg, srcImg, CV_BGR2GRAY); 10 threshold(srcI

matlab练习程序(Ritter‘s最小包围圆)

原始算法是sphere,我这里简化为circle了. Ritter's求最小包围圆为线性算法,因为非常简单,所以应用非常广泛. 该算法求出的圆比最优圆大概会大个5%到20%左右,求最优圆应该可以用Bouncing Bubble算法,以后有机会可以尝试一下. Ritter's算法如下: 1.从点集中随机选出两个点作为直径对圆进行初始化. 2.判断下一个点p是否在圆中,如果在则继续本步骤,如果不在则进行步骤3. 3.使用p作为新圆的一个边界点,另一个边界点为距离p最远的圆上的点,使用这两个点作为直径

寻找最小的K个数

寻找最小的K个数 题目描述:查找最小的K个数 题目:输入n个整数,输出其中最小的K个数 例如,输入1.2.3.4.5.6.7.8这8个数字,则最小的4个数字为1.2.3.4. 第一节.各种思路,各种选择 要求一个序列中最小的K个数,按照惯有的思维方式,很简单,先对这个序列从小到大排序,然后输出前面的最小的K个数即可: 至于选取什么样的排序方法,第一时间应该想到的是快速排序,我们知道,快速排序平均时间复杂度为O(nlogn),然后再遍历序列中前K个元素输出,即可,总的时间复杂度为O(nlogn +

2015 百度之星 1006 矩形面积 最小点覆盖矩形

矩形面积 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1754 Description 小度熊有一个桌面,小度熊剪了很多矩形放在桌面上,小度熊想知道能把这些矩形包围起来的面积最小的矩形的面积是多少. Input 第一行一个正整数 T,代表测试数据组数(1≤T≤20),接下来 T 组测试数据. 每组测试数据占若干行,第一行一个正整数 N(1≤N<≤1000),代表矩形的数量.接下来 N

平面点集的最小包围圆 hdu 3932

最小覆盖圆算法地址:http://soft.cs.tsinghua.edu.cn/blog/?q=node/1066 平面点集的最小包围圆 1.           问题背景 考察固定在工作平台上的一直机械手,要捡起散落在不同位置的多个零件,并送到别的地方.那么,这只机械手的底座应该选在哪里呢?根据直觉,应该选在机械手需够着的那些位置的"中心".准确地讲,也就是包围这些点的那个最小圆的圆心----该位置的好处是,可使机械手的底座到它需要够着的那些点的最大距离最小化.于是可得如下问题:给

十大基础实用算法之寻找最小(最大)的k个数-线性查找算法

例如:输入1,2,3,4,5,6,7,8这8个数字,则最小的4个数字为1,2,3,4. 思路1:最容易想到的方法:先对这个序列从小到大排序,然后输出前面的最小的k个数即可.如果选择快速排序法来进行排序,则时间复杂度:O(n*logn) 注:针对不同问题我们应该给出不同的思路,如果在应用中这个问题的规模不大,或者求解前k个元素的频率很高,或者k是不固定的.那么我们花费较多的时间对问题排序,在以后是使用中可以线性时间找到问题的解,总体来说,那么思路一的解法是最优的. 思路2:在思路1的基础上更进一步