python使用opencv模块画简单的图形
opencv模块提供了画图函数接口,这些函数接口可以很方便的绘制简单地图形。
cv2.line():绘制线段函数
cv2.circle():绘制圆
cv2.rectangle():绘制矩形
cv2.ellipse():
cv2.putText():
首先我们先画最简单的线段,代码如下:
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = np.zeros((512, 512, 3), np.uint8)
cv2.line(img,(0,0), (512, 512),(255, 0, 0), 5)
cv2.imwrite('line.jpg', img)
img1 = cv2.imread('line.jpg', cv2.IMREAD_ANYCOLOR)
b,g,r = cv2.split(img1)
img1 = cv2.merge([r, g, b])
plt.imshow(img1, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([])
plt.yticks([])
这段代码运行结果就是从左上到右下的一段蓝线,效果如下:
为了更好的展示line函数接口的参数含义,特写如下代码:
import numpy as np
import cv2
from matplotlib import pyplot as plt
img1 = np.zeros((512, 512, 3), np.uint8)
img2 = np.zeros((512, 512, 3), np.uint8)
img3 = np.zeros((512, 512, 3), np.uint8)
cv2.line(img1,(0,0), (511, 511),(255, 0, 0), 5)
cv2.imwrite('line1.jpg', img1)
img1 = cv2.imread('line1.jpg', cv2.IMREAD_ANYCOLOR)
b,g,r = cv2.split(img1)
img1 = cv2.merge([r, g, b])
cv2.line(img2,(0,0), (254, 254),(0, 255, 0), 5)
cv2.imwrite('line2.jpg', img2)
img2 = cv2.imread('line2.jpg', cv2.IMREAD_ANYCOLOR)
b,g,r = cv2.split(img2)
img2 = cv2.merge([r, g, b])
cv2.line(img3,(255,255), (511, 511),(0, 0, 255), 5)
cv2.imwrite('line3.jpg', img3)
img3 = cv2.imread('line3.jpg', cv2.IMREAD_ANYCOLOR)
b,g,r = cv2.split(img3)
img3 = cv2.merge([r, g, b])
plt.subplot(131)
plt.imshow(img1, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([])
plt.yticks([])
plt.subplot(132)
plt.imshow(img2, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([])
plt.yticks([])
plt.subplot(133)
plt.imshow(img3, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([])
plt.yticks([])
运行结果为:
由此可以清晰的明白了line函数接口的用法和参数意义。
矩形是由四条线段组成的,因此矩形完全可以使用line函数画出,opencv模块单独提供了矩形绘制接口cv2.rectangle()。
代码如下:
import numpy as np
import cv2
from matplotlib import pyplot as plt
img1 = np.zeros((1024, 1024, 3), np.uint8)
cv2.rectangle(img1,(255,255), (767, 767),(255, 0, 0), 5)
cv2.imwrite('rectangle.jpg', img1)
img1 = cv2.imread('rectangle.jpg', cv2.IMREAD_ANYCOLOR)
b,g,r = cv2.split(img1)
img1 = cv2.merge([r, g, b])
plt.imshow(img1, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([])
plt.yticks([])
运行结果如下:
可见rectangle函数的参数与line函数的参数一模一样。
同时我们发现其他绘图函数的参数和line函数的参数也都是一样的。
圆形绘图代码:
import numpy as np
import cv2
from matplotlib import pyplot as plt
img1 = np.zeros((1024, 1024, 3), np.uint8)
cv2.circle(img1,(512,512), 379,(255, 255, 0), 5)
cv2.imwrite('circle.jpg', img1)
img1 = cv2.imread('circle.jpg', cv2.IMREAD_ANYCOLOR)
b,g,r = cv2.split(img1)
img1 = cv2.merge([r, g, b])
plt.imshow(img1, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([])
plt.yticks([])
运行结果为:
椭圆形绘图代码:
import numpy as np
import cv2
from matplotlib import pyplot as plt
img1 = np.zeros((1024, 1024, 3), np.uint8)
cv2.ellipse(img1,(512,512), (379, 255), 0,0,360,150,-1)
cv2.imwrite('ellipse.jpg', img1)
img1 = cv2.imread('ellipse.jpg', cv2.IMREAD_ANYCOLOR)
b,g,r = cv2.split(img1)
img1 = cv2.merge([r, g, b])
plt.imshow(img1, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([])
plt.yticks([])
运行结果为:
我们发现椭圆的绘制函数和其他绘制函数稍微有一些区别,这一点我们需要注意。