【翻译:OpenCV-Python教程】OpenCV里的画图方法

⚠️这个系列是自己瞎翻的,文法很丑,跳着跳着捡重要的部分翻,翻错了不负责,就这样。

⚠️基于3.4.3,Drawing Functions in OpenCV,原文

 

目标 

代码 

在刚才提到的所有方法里,你会看到一些如下给出的公共的参数:

  • img : 你想要画出图形在哪个image上
  • color : 图形的BGR颜色,用一个元组来传这个参数,例如:(255,0,0)表示蓝色。如果要灰度,则传入一个量标。
  • thickness : 线或者圆的粗细,如果传入对于一个封闭的轮廓,比如圆形,传入**-1**那么它会被填满。默认的粗细为1。
  • lineType : 线型,要么是八连通的,要么是抗锯齿的。默认是八连通的。cv.LINE_AA 使得抗锯齿线条看起来更有弧度。(译者注:请大家自行百度关键词8-connected / anti-aliased)

画一条线

要画出一条线,你需要传入这条线的起止点座标。我们要先创建一个全黑的image,然后从左上角往右下角画条蓝色的线。

import numpy as np
import cv2 as cv
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
cv.line(img,(0,0),(511,511),(255,0,0),5)

画矩形

要画一个矩形,你需要左上角和右下角的点,这次我们要在右上角画一个绿色的矩形。

 

cv.rectangle(img,(384,0),(510,128),(0,255,0),3)

画圆圈

画圆圈,你需要它的中点座标和半径。我们要在刚才画好的矩形里再画一个圆。 

cv.circle(img,(447,63), 63, (0,0,255), -1)

画椭圆

要画椭圆我们需要传入好几个参数。第一个参数是中点 (x,y)。接下来是主轴和次轴的轴长。参数angle则表示椭圆(主轴)逆时针方向转动的角度。startAngle 和 endAngle 两个参数指示出了从主轴开始以顺时针方向衡量的起止弧度。比如,传入0和360就会得到一个完整的椭圆。想要更多信息,查看 cv.ellipse() 方法的文档如下示例在image正中间画出一个半边椭圆。

cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)

画多边形

要画一个多边形,首先你需要一堆顶点的座标。把这些点弄成一个ROWSx1x2的数组。ROWS表示顶点的数量,它得是一个int32型的整数。接下来咱们画一个小的黄色四边形。

pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)

pts = pts.reshape((-1,1,2))

cv.polylines(img,[pts],True,(0,255,255))

提示

如果第三参数为False,你会得到一段穿过所有点的多段折线(polylines),而非一个封闭的图形。

cv.polylines() 此方法可以被用于画多段线。只要创建你想要画线条的list丢进方法里就可以了,在要画一堆线条的时候,它比挨个调用 cv.line() 要快要好。

图像上添加文字

想要在图像上添加文字,你需要指定以下几点:

  • 你要写上的文本
  • 你要放置文本的位置座标 (比如,数据起于坐下角)
  • 字体 (查看 cv.putText() 文档了解支持的字体)
  • 字体比例 (指定字体大小)
  • 通常的参数比如颜色,粗细,线型,等等。为了更好看,推荐cv.LINE_AA

我们要在图像上写上白色的OpenCV。 

font = cv.FONT_HERSHEY_SIMPLEX

cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)

结果

然后,是时候看看我们画图的最终结果啦。用你之前章节学到的,把图形展示出来看看。

drawing_result.jpg

 

额外资源

  1. 在 ellipse 方法中用到的角度,不是我们常说的圆角度。详情,看这个讨论

练习 

  1. 试着用可用的画图方法把OpenCV的logo画出来。

上篇:【翻译:OpenCV-Python教程】视频入门

下篇:【翻译:OpenCV-Python教程】把鼠标当做一个画笔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章