python编写一个简单矩形(python画矩形框)

http://www.itjxue.com  2023-02-13 14:13  来源:未知  点击次数: 

963. 最小面积矩形2(Python)

难度:★★☆☆☆

类型:几何

方法:排列

力扣链接请移步 本题传送门

更多力扣中等题的解决方案请移步 力扣中等题目录

给定在 xy 平面上的一组点,确定由这些点组成的任何矩形的最小面积,其中矩形的边不一定平行于 x 轴和 y 轴。

如果没有任何矩形,就返回 0。

示例 1:

输入:[[1,2],[2,1],[1,0],[0,1]]

输出:2.00000

解释:最小面积的矩形出现在 [1,2],[2,1],[1,0],[0,1] 处,面积为 2。

示例2:

输入:[[0,1],[2,1],[1,1],[1,0],[2,0]]

输出:1.00000

解释:最小面积的矩形出现在 [1,0],[1,1],[2,1],[2,0] 处,面积为 1。

示例 3:

输入:[[0,3],[1,2],[3,1],[1,3],[2,1]]

输出:0

解释:没法从这些点中组成任何矩形。

示例4:

输入:[[3,1],[1,1],[0,1],[2,1],[3,3],[3,2],[0,2],[2,3]]

输出:2.00000

解释:最小面积的矩形出现在 [2,1],[2,3],[3,3],[3,1] 处,面积为 2。

提示:

1 = points.length = 50

0 = points[i][0] = 40000

0 = points[i][1] = 40000

所有的点都是不同的。

与真实值误差不超过 10^-5 的答案将视为正确结果。

这道题没有巧办法,只能按部就班使用笨办法解决。

有以下几个知识点需要注意:

矩形的判定规则:对于一个右四个顶点组成的四边形,如果有三个角是直角,那么这个四边形是矩形。

向量垂直的法则:如果两个向量的点积(对应位置的乘积)为零,那么这两个向量垂直。

矩形的面积等于两条相邻边的欧式距离的乘积。

我们寻找所有四个点的排列情况,如果满足以上矩形的判定规则,则将该矩形的面积记录更新在结果ans中。

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步 力扣中等题解析

OpenCV Python实现旋转矩形的裁剪

环境

矩形操作是我们在 OpenCV 里最常用的操作,其中最为常见的就是包围框( Bounding Box )和旋转矩形( Rotated Box )。 其中包围框是最为常见的,对应 OpenCV 中的 boundingRect() ,使用正矩形框处物体,一般多用在目标检测中。使用包围框框柱目标物体,这种操作比较简单,但是通常框中也会有一些其他的区域。其次就是使用旋转矩形,也叫最小外接矩形,对应 OpenCV 中的 minAreaRect() ,用来使用旋转矩形最大限度的框出目标物体,减小背景干扰,在 OCR 任务中较为常用。

minAreaRect() 返回了所需区域的最小斜矩形的参数,与包围框直接返回四个顶点的坐标不同,最小外接矩形返回的是矩形的 ((x, y), (w, h), angle) ,对应了矩形的中心,宽度,高度和旋转角度。

旋转角度 angle 是水平轴( x 轴)逆时针旋转,与碰到的矩形的第一条边的夹角。并且这个边的边长是 width ,另一条边边长是 height 。也就是说,在这里 width 与 height 不是按照长短来定义的。

在 OpenCV 中,坐标系原点在左上角,相对于 x 轴,逆时针旋转角度为负,顺时针旋转角度为正,所以函数 minAreaRect() 返回的角度范围时 [-90~0) 。想象一个平放的长矩形,调用 minAreaRect() 返回的角度为 -90 度。如果我们旋转图像,直到矩形树立起来,这是调用 minAreaRect() 得到的角度依然是 -90 度。

第一种裁剪旋转矩形的方法是通过仿射变换旋转图像的方式。

仿射变换( Affine Transformation ) 是一种二维坐标到二维坐标之间的线性变换,保持二维图形的“平直性”( straightness ,即变换后直线还是直线不会打弯,圆弧还是圆弧)和“平行性”( parallelness ,其实是指保二维图形间的相对位置关系不变,平行线还是平行线,相交直线的交角不变。)。

计算过程:

如果不做边长和角度的判断,则只会沿着 x 轴的顺时针方向做相同大小角度的旋转,不能保证旋转后的视角是正确的视角:

根据任务目标的类型,做边长和角度的判断并进行相应的调整,可以保证旋转后的视角是正确的视角:

第二种裁剪旋转矩形的方法是通过透视变换直接将旋转矩形的四个顶点映射到正矩形的四个顶点。

透视变换( Perspective Transformation )是将图片投影到一个新的视平面( Viewing Plane ),也称作投影映射( Projective Mapping )。

计算过程:

以上两种方法都可以用来抠取旋转矩形的内容。仿射变换方法需要预先对整张图进行旋转,通过观察旋转后的图像可以发现,有一部分图像被旋转出了图像边界,如果你要抠取的目标正好在图像边缘附近,那么很容易出界导致图像抠取的缺失。同时我们需要对宽、高和角度做出动态的调整;透视变换的方法直接对抠取区域进行了映射,这种方法可以省略旋转的步骤,并且不会出现抠取内容的缺失。同时我们只需要对4个顶点之间的映射关系做好定义即可,不需要考虑角度的问题。相对的,透视变换相对于仿射变换计算量更大一些,不过这在 c++ 的底层实现上带来的时延差距小于 ms 。

python无边正方形绘制代码?

你好,答案如下所示。

程序缩进如图所示

运行结果如图所示

希望你能够详细查看。

如果你有不会的,你可以提问

我有时间就会帮你解答。

希望你好好学习。

每一天都过得充实。

如何在python中生成多个不在一起的矩形

首先需要定义一个生成矩形的矩阵,因为没说这些矩形是否长宽相同或者不同,我就假设所有矩形形状相同。至于矩形位置,没说是随机位置还是整齐排列的,假设是m*n个小矩形排成一个大矩形,那就用一个嵌套的二层循环就好:

for j in n:

for i in m:

creatRectangle(x0+i*w,y0+j*h,w,h)

(责任编辑:IT教学网)

更多

推荐excel文章