精华内容
下载资源
问答
  • 关于RotateRect的一些说明

    千次阅读 2016-11-06 20:37:42
    说明:以下的内容有一部分来源于网络。... RotatedRect中返回的角度angle,在 在水平轴和第一条边之间的角度。(好简洁,但是真的并没有太明确) ...下面的是作者的理解图,感觉不错 ...这里我补充一下,对于哪个边是...

     

    说明:以下的内容有一部分来源于网络。摘录自这个博客:http://www.mamicode.com/info-detail-1328031.html

    RotatedRect中返回的角度angle,在

    在水平轴和第一条边之间的角度。(好简洁,但是真的并没有太明确)

    下面的是作者的理解图,感觉不错

    这里我补充一下,对于哪个边是width,哪个边是height。是X轴逆时针旋转哪个边最先与X轴平行哪个边就是width,旋转的角度就是那个。注意这里面的角度的取值范围是[-90,0]。还有逆时针旋转为正

     

    https://blog.csdn.net/qq_24237837/article/details/77850496

    python:  minAreaRect函数返回矩形的中心点坐标,长宽,旋转角度[-90,0),当矩形水平或竖直时均返回-90

     _, contours, _ = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    contour = contours[0]
    # epsilon = 0.01 * cv2.arcLength(contour, True)
    # bbox = cv2.approxPolyDP(contour, epsilon, True)
    rect_1 = cv2.minAreaRect(contour)
    point_rt = cv2.boxPoints(rect_1)

     

    #include<iostream>
    #include "opencv2/opencv.hpp"
    #include<opencv2/imgproc/imgproc.hpp>
    using namespace std;
    using namespace cv;
    void main()
    {
    	Mat img=imread("test3.jpg");
    	Mat img_gray;
    	cvtColor(img,img_gray,CV_BGR2GRAY);
    	Mat th_img(img.size(),CV_8UC1);
    	threshold(img_gray,th_img,220,255,THRESH_BINARY_INV);
    	//imshow("th",th_img);
    	//waitKey(0);
    	vector< vector< Point> > contours;
    	findContours(th_img,
    		contours, // a vector of contours
    		CV_RETR_EXTERNAL, // retrieve the external contours
    		CV_CHAIN_APPROX_NONE); // all pixels of each contours
    	//cv::drawContours(img,contours,
    	//	-1, // draw all contours
    	//	cv::Scalar(255,0,0), // in blue
    	//	1); // with a thickness of 1
    
    	vector<vector<Point>>::iterator itc=contours.begin();
    	//vector<RotatedRect> rects;
    	//while(itc!=contours.end())
    	//{
    		RotatedRect mr=minAreaRect(Mat(contours[0]));
    		cout<<"width="<<mr.size.width<<endl;
    		cout<<"height="<<mr.size.height<<endl;
    		cout<<"angle="<<mr.angle<<endl;
    		Mat draw(img.size(),img.type(),Scalar(255,255,255));
    		Point2f vectpoint[4];
    		mr.points(vectpoint);
    		for(int i=0;i<4;i++)
    		{
    			line(draw,vectpoint[i],vectpoint[(i+1)%4],Scalar(255,0,0),2);
    		}
    		imshow("draw",draw);
    
    		//itc++;
    	//}
    
    	float angle=mr.angle+90;
    		//float angle=5;
    		 Mat rotmat= getRotationMatrix2D(mr.center, angle,1);
    		 Mat img_rotated;
    		// Size si=Size(700,700);
    		 warpAffine(img, img_rotated, rotmat, img.size(), CV_INTER_CUBIC);// warpAffine(img, img_rotated, rotmat, img.size(), CV_INTER_CUBIC);		
    		 Mat rRect;
    		 Size si=mr.size;
    		 swap(si.width,si.height);
    		 getRectSubPix(img_rotated,si,mr.center,rRect);
    		 imshow("截取的矩形",rRect); 
    		 imshow("roate",img_rotated);
    	    imshow("src",img);
    		waitKey();
    }

     

     

     

     

     

    roate那个图这里的宽是短的那边,为了平放矩形,所以加的90°。 至于旋转angle角度,感觉就是使得宽width边和x轴平行。

     

    展开全文
  • 在OpenCV3中的绘图详解中,我们详细地介绍了opencv3中所支持的各种几何形状的绘制,其中矩形的绘制接口为cv::rectangle(),但是这个接口只能用于绘制正常矩形(即cv::Rect定义的矩形,长是水平...:RotateRect)的绘制。

    OpenCV3中的绘图详解中,我们详细地介绍了opencv3中所支持的各种几何形状的绘制,其中矩形的绘制接口为cv::rectangle(),但是这个接口只能用于绘制正常矩形(即cv::Rect定义的矩形,长是水平,高是竖直),但不支持旋转矩形(cv::RotateRect)的绘制。比如我们使用如下代码,通过若干点来拟合椭圆(cv::fitEllipse()),拟合出的椭圆是以椭圆的外接矩形呈现的,这个椭圆的外接矩形就是一个旋转矩形。


    	//创建一个用于绘制图像的空白图  
    	cv::Mat image = cv::Mat::ones(480, 640, CV_8UC3);
    	//设置蓝色背景
    	image.setTo(cv::Scalar(100, 0, 0));
    
    	//输入拟合点  
    	std::vector<cv::Point> points;
    
    	points.push_back(cv::Point(200, 240));
    	points.push_back(cv::Point(300, 400));
    	points.push_back(cv::Point(400, 360));
    	points.push_back(cv::Point(500, 300));
    	points.push_back(cv::Point(500, 200));
    	points.push_back(cv::Point(300, 150));
    
    	//将拟合点绘制到空白图上  
    	for (int i = 0; i < points.size(); i++)
    	{
    		cv::circle(image, points[i], 5, cv::Scalar(0, 0, 255), 2, 8, 0);
    	}
    
    	//获取拟合椭圆的外包围矩形
    	cv::RotatedRect rotate_rect = cv::fitEllipse(points);
    	//绘制拟合椭圆
    	cv::ellipse(image, rotate_rect, cv::Scalar(0, 255, 255), 2, 8);
    
    	cv::imshow("image", image);
    	cv::waitKey(0);



    从代码中可以看出,我们可以使用cv::ellipse()来绘制椭圆。但是,如果我们想将这个外接的旋转矩形也绘制出来的话,该怎么操作?opencv中有没有提供专门用于绘制旋转矩形的函数?很遗憾,没有。


    下面介绍两种种解决旋转矩形的绘制问题的方案。


    1、使用cv::line()逐条边绘制

    代码如下:

    	//获取旋转矩形的四个顶点
    	cv::Point2f* vertices = new cv::Point2f[4];
    	rotate_rect.points(vertices);
    
    	//逐条边绘制
    	for (int j = 0; j < 4; j++)
    	{
    		cv::line(image, vertices[j], vertices[(j + 1) % 4], cv::Scalar(0, 255, 0));
    	}


    结果如下:



    2、使用cv::drawContours()函数进行绘制

    代码如下:

    	//获取旋转矩形的四个顶点
    	cv::Point2f* vertices = new cv::Point2f[4];
    	rotate_rect.points(vertices);
    	
    	std::vector<cv::Point> contour;
    
    	for (int i = 0; i < 4; i++)
    	{
    		contour.push_back(vertices[i]);
    	}
    
    	std::vector<std::vector<cv::Point>> contours;
    	contours.push_back(contour);
    	cv::drawContours(image, contours, 0, cv::Scalar(255, 255, 0), 1);


    结果如下:




    2017.04.11

    展开全文
  • 旋转矩形的angle确定方式:X轴逆时针旋转,遇到的第一个边的延长线认为是宽(和长度无关),angle是宽和X轴的夹角。范围是(-90,0] 如果想要把矩形回正,需要对图片进行旋转,旋转角度规则:顺时针为负,逆时针为...

     

     旋转矩形的angle确定方式:X轴逆时针旋转,遇到的第一个边的延长线认为是宽(和长度无关),angle是宽和X轴的夹角。范围是(-90,0]

    如果想要把矩形回正,需要对图片进行旋转,旋转角度规则:顺时针为负,逆时针为正

    要把上述两个矩阵回正需要做的的:

    		Point2f center(src.cols / 2, src.rows / 2);
    		Mat rotm = getRotationMatrix2D(center, rectAngle, 1.0);
    		Mat srcRotate;
    		warpAffine(src, srcRotate, rotm, src.size(), INTER_LINEAR, 0);

    当矩形为矩形1时,rectangle=rectangle+90   逆时针旋转20度

    当矩形为矩形2时,rectangle=rectangle   顺时针旋转10度

    展开全文
  • The functionminAreaRectseems to give angles ranging from -90 to 0 degrees, not including zero, so an interval of [-90, 0). The function gives -90 degrees if the rectangle it outputs isn't rotated, .....

    The function minAreaRect seems to give angles ranging from -90 to 0 degrees, not including zero, so an interval of [-90, 0).

    The function gives -90 degrees if the rectangle it outputs isn't rotated, i.e. the rectangle has two sides exactly horizontal and two sides exactly vertical. As the rectangle rotates clockwise, the angle increases (goes towards zero). When zero is reached, the angle given by the function ticks back over to -90 degrees again.

    So if you have a long rectangle from minAreaRect, and it's lying down flat, minAreaRect will call the angle -90 degrees. If you rotate the image until the rectangle given by minAreaRect is perfectly upright, then the angle will say -90 degrees again.

    I didn't actually know any of this (I procrastinated from my OpenCV project to find out how it works :/). Anyway, here's an OpenCV program that demonstrates minAreaRect if I haven't explained it clear enough already:

    https://stackoverflow.com/questions/15956124/minarearect-angles-unsure-about-the-angle-returned

    展开全文
  • public Mat guiyihuaMatByRoi(Mat cpsrcMat,RotatedRect rotatedRect){ /*Point[] rectPoints=new Point[4]; rotatedRect.points(rectPoints);//存储矩形4点坐标 for(int i=0;i;
  • OpenCV:旋转矩形(RotatedRect)

    万次阅读 2019-06-20 18:26:57
    RotatedRect类是OpenCV的基础类,用于创建旋转矩形,下面是它的构造函数,包含旋转中心点、尺寸大小和旋转角度。 构造函数1: RotatedRect(const Point2f& center, const Size2f& size, float angle);...
  • 为了解决这种麻烦,并加快执行速度,本文编写了cv_rotateRect.cpp,利用mex和OpenCV的透视变换warpPerspective()来快速裁剪需要的区域。 需要注意的有三个地方: 一是Matlab储存方式是按列储存,左图,OpenCV是按...
  • RotateRect旋转矩形的角度和其构造有关系,构造方法有角度构造、点构造、minAreaRect()返回旋转矩形,同样的旋转矩形会因为其构造方式不同而有所不同。 我们先来讲一下RotatedRect的点P[0],P[0]指的就是y值最大的...
  • OpenCV之RotatedRect基本用法和角度探究

    千次阅读 2019-10-06 22:37:08
    文章目录一、属性1.成员变量2.构造函数3.成员函数4.例子二、类成员变量探究1.用角度构造和用三个点构造2.minAreaRect()圈出的旋转矩形3.minAreaRect()后改变类属性 一、属性 1.成员变量 ...default constructor...
  • RotatedRect参数详解

    千次阅读 2020-02-12 10:44:13
    首先解释一下类型中的成员 RotatedRect该类表示平面上的旋转矩形(摘自任重道远-HSY)包含以下三部分: 矩形中心点(质心) 边长(长和宽) 旋转角度 class CV_EXPORTS RotatedRect { ... center, con...
  • openCV函数pointPolygonTest(): C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist) 用于判断一个点是否在轮廓中  当measureDist设置为true时,若返回值为正,表示点在轮廓内部...
  • RotatedRect类的裁剪实现 RotatedRect该类表示平面上的旋转矩形,包含以下三个部分的参数:1、矩形中心点(质心)2、矩形边长(长和宽)3、旋转角度(在opencv中,坐标的原点在左上角,与x轴平行的方向为角度为0,逆...
  • 原文由作者发表在博客园:&amp;amp;nbsp;... 关于cvBox2D和RotatedRect中返回的角度angle的opencv官方说明文档里面没有给出太多到信息,其中文档是这样说的: &amp;amp;nbsp; &amp;amp;...a
  • 关于opencv中RotatedRect的角度疑问

    千次阅读 2017-03-15 09:28:47
    如图,四个长方形,rect.angle分别为0,20,140,260;四个顶点0~4处画圆,半径依次增大; 直线为中心点center到(center.x+1000*cos(rect.angle),center.y+1000*sin(rect.angle))的直线. 由图可见几点: ...
  • 48. Rotate Image(旋转图像)1. 题目描述2. 序号操作(Index Manipulation)2.1 解题思路2.2 实例代码3.3.1 解题思路3.2 实例代码4. 参考资料 1. 题目描述 给定一个 n × n 的二维矩阵表示一个图像。...
  • OpenCV中两个旋转矩形RotatedRect的交集

    千次阅读 2017-10-13 15:40:55
    OpenCV中两个旋转矩形RotatedRect的交集
  • X轴逆时针旋转碰到的第一条边为width,角度就是width边和X轴的夹角(参考),我的个人理解是:X轴绕原点旋转,第一条与X轴平行的边为width。大部分情况符合我的理解,但是0度和-90度的判断却不怎么理想。...
  • 基础——RotatedRect中返回的角度angle

    千次阅读 2018-06-23 21:01:55
    以下是RotatedRect里面的角度angle的说明图: 这里要注意的4点是: 1、角度angle的取值是由RotatedRect的width和X轴的夹角组成的。 2、RotatedRect的width和height的选取跟矩形的尺寸无关,并非长的就是height,...
  • https://blog.csdn.net/weixin_40647819/article/details/80884594
  • 函数名:full_rotated_rect 函数参数: image输入图像,rect希望在图像中填充的RotatedRect,color填充的颜色 主要的思路是:先找到RotatedRect的四个顶点,然后画出外框。再利用四个顶点找出其中平行两边的所有点...
  • 以下是RotatedRect里面的角度angle的说明图: 这里要注意的4点是:1、角度angle的取值是由RotatedRect的width和X轴的夹角组成的。2、RotatedRect的width和height的选取跟矩形的尺寸无关,并非长的就是height,短的...
  • 原创文章,未经作者允许,请勿转载,谢谢! 一开始想的是传统的水漫法,但是想着矩形这么规则,应该可以有别的方法,于是想到了下面这种小trick。 1.首先计算rotatedRect的四个顶点。 ...RotatedRect rRect(Point2f...
  • vector<vector<Point>>://一般在轮廓查找和轮廓绘制使用,参数 contours vector容器里面放了一个vector容器,子容器里放点 vector<...:放了4维int向量//一般在轮廓查找和轮廓绘制使用,参数 ...
  • 之前做了这个东西,一个内部素材加外操作边框,包含基本的移动、缩放、旋转,拉伸,快速定位,十字对齐等操作。常见使用场景如添加马赛克,添加画中画等。感觉比较有意思而且中间也遇到了一些问题就记录一下 ...
  • opencv中RotatedRect的angle这个成员变量总是诡异的不同寻常(http://stackoverflow.com/questions/15956124/minarearect-angles-unsure-about-the-angle-returned),官网也没有任何解释。下面是获取RotatedRect的...
  • 【OpenCV3图像处理】RotatedRect类 详解

    千次阅读 2018-09-07 15:53:38
    RotatedRect是一个存储旋转矩形的类,通常用来存储最小外包矩形函数minAreaRect( )和椭圆拟合函数fitEllipse( )返回的结果。存储的值,完全取决在于函数的返回   类的声明:OpenCV3 帮助文档 ...
  • C++vector rotate的使用

    2020-01-30 18:54:08
    rotate可以传入三个参数,将第二个参数到第三个参数的元素放到第一个参数前面 以下是rotate使用的具体例子: // 难度3~8 // 假设有一个容器里面存的数据是无序, // 例如是 1 5 3 5 6 7 100 // 函数传入这个容器 和 ...
  • 网上很多例子都说cv2.minAreaRect函数的输出的角度范围在[-90,0],但是实测输出范围在[0,90]。再进行调研,确定为opencv4.5版本升级改动引起。 cv2.minAreaRect输入:四边形的四个点(不要求顺序)。...
  • RotatedRect 类的用法

    2018-03-01 20:23:00
    RotatedRect 以 Emgu.CV.Structure 为命名空间。 表示带有旋转角度的矩形。 结构说明 普通矩形的基本结构 转载于:https://www.cnblogs.com/nulidemaomaochong/p/8490431.html...
  • OpenCV对图片中的RotatedRect进行填充

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 212
精华内容 84
关键字:

rotaterect