十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
def fun1(x, y):
创新互联公司-成都网站建设公司,专注网站设计、成都网站设计、网站营销推广,国际域名空间,网络空间,绵阳服务器托管有关企业网站制作方案、改版、费用等问题,请联系创新互联公司。
#面积
return x * y
def fun2(x, y):
#周长
return 2 * (x +y)
环境
矩形操作是我们在 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 。
1、首先用这段打开一张图片,跟程序不在一个文件夹的话要长地址img=Image.open("1.jpg") #打开图片1.jpg。
2、a=ImageDraw.ImageDraw(img)由于拿来表示对象的太长,可以用这个来缩减一下,下次用a来表示即可。
3、在图上画一个矩形,在100,150起点画长800宽200的图形,填充白色,边框黑色,边框像素为1。
4、打开文档说明看看,这段是对函数的解释。
5、翻译一下就很好理解了,xy需要的是长方形的4个点,填充颜色 fill = None ,边框颜色 outline = None,边框宽度 width = 0。
在日常生活中,我们经常会需要去计算周长或者面积.虽然说难度不大,但是很多时候在写程序的时候,比如一张图片的面积,或者页面布局的时候也是会需要用到的.
#定义计算矩形周长的函数
def girth(width,height):
return (width+height)*2
#定义计算矩形面积的函数
def area(width,height):
return width*height
if __name__ =='__main__':
print(area(10,20))
print(girth(25,50))
62.83
706.86
用python计算长方形面积并保留两位小数,需要使用Python中字符串格式化的方法或者round()函数的方法。
1、打开python的编辑器pycharm,并为这个程序写上注释的内容,新建一个变量a,利用round函数将a的值保留2位数。
2、假设area为存储结果的变量,操作方法如下:字符串格式化:area=float("%.2f".area)。
可以使用如下代码创建一个Python模板,包含两个函数:一个计算长方形面积的函数,一个计算长方形周长的函数。
# 定义一个函数,用于计算长方形的面积
def rectangle_area(length, width):
return length * width
# 定义一个函数,用于计算长方形的周长
def rectangle_perimeter(length, width):
return 2 * (length + width)
在这段代码中,“rectangle_area”函数用于计算长方形的面积,“rectangle_perimeter”函数用于计算长方形的周长。两个函数都接收两个参数:长方形的长和宽。
要使用这两个函数,可以使用如下代码:
# 输入长方形的长和宽
length = float(input('请输入长方形的长:'))
width = float(