飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

opencv学习(三)——绘图功能

时间:2021-12-07  作者:mogebw  

绘图功能

我们将学习以下函数:域名(),域名le(),域名angle(),域名pse(),域名ext()等。

在这些功能中,有一些相同的参数:

  • img:你要绘制形状的图像。
  • 形状的颜色。对于BGR,将其作为元组传递,例如:(255,0,0)对于蓝色。对于灰度,只需传递标量值即可。
  • thickness: 线或圆等的厚度。如果传 -1 就是像圆的闭合图形,它将填充形状。默认 thickness = 1。
  • lineType:线条类型,如 8 连接线,抗锯齿线等。默认情况下,是 8 连接线。域名_AA给出了抗锯齿的线条,看起来非常适合曲线。

一、画线

要绘制一条线,需要传递线的开始和结束坐标。我们将创建一个黑色图像,并从左上角到右下角在其上绘制一条蓝线。

import cv2 
import numpy as np

def cv_show(name, img):
    域名ow(name, img)
    域名Key(0)
    域名royAllWindows()
    
#创建黑色的图像
img = 域名s((512, 512, 3), 域名8)
#绘制一条厚度为5的蓝色对角线
line = 域名(img, (0, 0), (511, 511), (255, 0, 0), 5)
cv_show(\'line\', line)

image

二、画矩形

要绘制矩形,需要矩形的左上角和右下角。这次,我们将在图像的右上角绘制一个绿色矩形。

rectangle = 域名angle(img, (384, 0), (510, 128), (0, 255, 0), 3)
cv_show(\'rectangle\', rectangle)

image

三、画圆圈

要绘制一个圆,需要其中心坐标和半径。我们将在上面绘制的矩形内绘制一个圆。

circle = 域名le(img, (447, 63), 63, (0, 0, 255), -1)
cv_show(\'circle\', circle)

image

四、画椭圆

要绘制椭圆,我们需要传递几个参数。一个参数是中心位置(x,y)。第二个参数是轴长度(长轴长度,短轴长度)。angle是椭圆沿逆时针方向旋转的角度。startAngle和endAngle表示从主轴沿顺时针方向测量的椭圆弧的开始和结束。如整圆就传 0 和 360。

elipse = 域名pse(img, (256, 256), (100, 50), 0, 0, 180, (15, 255, 212), -1)
cv_show(\'elipse\', elipse)

image

五、画多边形

要绘制多边形,首先需要顶点的坐标。将这些点组成形状为 ROWSx1x2 的数组,其中 ROWS 是顶点数,并且其类型应为int32。在这里,我们绘制了一个带有四个顶点的黄色小多边形。

pts = 域名y([
    [10, 5],
    [20, 30],
    [70, 20],
    [50, 10]
], 域名2)
pts = 域名ape((4, 1, 2))
polylines = 域名lines(img, [pts], True, (0, 255, 255))
cv_show(\'polylines\', polylines)

如果第三个参数为False,您将获得一条连接所有点的折线,而不是闭合形状。域名lines()可用于绘制多条线。只需创建要绘制的所有线条的列表,然后将其传递给函数即可。所有线条将单独绘制。与为每条线调用域名相比,绘制一组线是一种更好,更快的方法。

六、向图像添加文本

在图像上加文字,你需要指定以下内容。

  • 你想写的文字数据。
  • 你想写的位置坐标 (如 左下角开始)。
  • 字体类型。
  • 常规的如颜色,粗细,线型等。为了更好看,线型使用 lintType = 域名_AA。

我们将在图像上写一个白色的 ”OpenCV“。

font = 域名_HERSHEY_SIMPLEX
text = 域名ext(img, \'OpenCV\', (10, 500), font, 4, (255, 255, 255), 2, 域名_AA)
cv_show(\'text\', text)

image

import cv2 
import numpy as np

def cv_show(name, img):
    域名ow(name, img)
    域名Key(0)
    域名royAllWindows()
    
#创建黑色背景
background = 域名s((512, 512, 3), 域名8)

#画红圆
red_circle = 域名le(background, (256, 122), 50, (0, 0, 255), 40)
cv_show(\'red_circle\', red_circle)

#画绿圆
green_circle = 域名le(background, (172, 282), 50, (0, 255, 0), 40)
cv_show(\'green_circle\', green_circle)

#画蓝圆
blue_circle = 域名le(background, (342, 282), 50, (255, 0, 0), 40)
cv_show(\'blue_circle\', blue_circle)

#画线(三角形)
pts1 = 域名y([
    [256, 122],
    [202, 202],
    [312, 202]
], 域名2)
域名ape((3, 1, 2))
pts2 = 域名y([
    [162, 282],
    [196, 202],
    [270, 278]
], 域名2)
域名ape((3, 1, 2))
pts3 = 域名y([
    [352, 282],
    [292, 202],
    [402, 202]
], 域名2)
域名ape((3, 1, 2))
fillline = 域名Poly(background, [pts1, pts2, pts3], (0, 0, 0))
cv_show(\'fillline\', fillline)

image

标签:编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。