opencv从入门到放弃---绘图函数
opencv中的绘图函数需要设置下面这些参数
- img:你想要绘制图形的那副图像
- color:形状的颜色
- thickness:线条的粗细,如果给定的是一个闭合图形设置为-1, 那么这个图形就会被填充;默认值为1
- linetype:线条的类型,8连接,抗锯齿等等;默认是8连接;cv2.LINE_AA为抗锯齿,这样看起来会非常平滑
注:之前看的书上说所有的绘图函数的返回值必须是None,但是直接返回也好使,不知道。。。
画线
要画一条线,你只需要告诉函数这条线的起点和终点
import cv2 as cv
import numpy as np
image = cv.imread('D:/2019-02/lena.jpg')
line = cv.line(image, (0, 0), (511, 511), (255, 0, 0), 5)
cv.imshow('image', line)
cv.imwrite('D:/2019-02/image-1.jpg', line)
cv.waitKey(0)
画矩形
需要告诉函数左上角和右下角顶点的坐标
import cv2 as cv
import numpy as np
image = cv.imread('D:/2019-02/lena.jpg')
rectangle = cv.rectangle(image, (130, 130), (511, 511), (255, 0, 0), 5)
cv.imshow('image', rectangle)
cv.imwrite('D:/2019-02/image-1.jpg', rectangle)
cv.waitKey(0)
画圆
需要指定圆形的中心点坐标和半径的大小
import cv2 as cv
import numpy as np
image = cv.imread('D:/2019-02/lena.jpg')
circle = cv.circle(image, (130, 130), 30, (255, 0, 0), -1)
cv.imshow('image', circle)
cv.imwrite('D:/2019-02/image-1.jpg', circle)
cv.waitKey(0)
画椭圆
画椭圆比较复杂,我们需要对输入几个参数,一个参数是中心点的坐标,下一个参数是长轴和短轴的长度,椭圆沿逆时针方向旋转的角度,椭圆弧沿顺时针方向起始的角度和结束角度,如果是0和360,那就是整个椭圆
import cv2 as cv
import numpy as np
image = cv.imread('D:/2019-02/lena.jpg')
ellipse = cv.ellipse(image, (256, 256), (100, 50), 30, 0, 180, (255, 0, 0), -1)
cv.imshow('image', ellipse)
cv.imwrite('D:/2019-02/image-1.jpg', ellipse)
cv.waitKey(0)
运行结果:
PS:偏移角度是按照顺时针方向偏移的吧
画多边形
画多边形需要指定每个顶点的坐标
import cv2 as cv
import numpy as np
image = cv.imread('D:/2019-02/lena.jpg')
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
poly = cv.polylines(image,[pts],True,(0,255,255))
cv.imshow('image', poly)
cv.imwrite('D:/2019-02/image-1.jpg', poly)
cv.waitKey(0)
当然这么一个图像也可以通过line函数进行操作,但是有一些麻烦
给图片添加数字
要在图片上添加数字,你需要设置下面参数:
- 你要绘制的文字
- 你要绘制的位置
- 字体类型
- 字体的大小
- 文字的一般属性,如颜色、粗细、线条的类型等等,为了更好看一点推荐使用linetype=cv2.LINE_AA
import cv2 as cv
import numpy as np
image = cv.imread('D:/2019-02/lena.jpg')
font = cv.FONT_HERSHEY_SIMPLEX
text = cv.putText(image, 'opencv', (10, 256), font, 4, (255, 255, 255), 2)
cv.imshow('image', image)
cv.imwrite('D:/2019-02/image-1.jpg', text)
cv.waitKey(0)