QQ:3020889729 小蔡
才学习opencv没多久,本意是经验总结、积累和回顾,望大神/大佬勿怪~
末尾有一个图形绘制样例——算是一个小练习吧 点击前往
线条绘制,将用到cv2.line()——每次调用绘制一条直线:由起止坐标组成
import cv2
import numpy as np
if __name__ == "__main__":
img = np.zeros((512, 512, 3), np.uint8) # 创建黑色图片
cv2.namedWindow('imag', cv2.WINDOW_NORMAL) # 创建可调节窗体
cv2.resizeWindow('imag', 510, 510) # 设置初始窗体大小
cv2.line(img, (0, 0), (510, 510), (255, 0, 0), 5) # 画蓝色背景线
cv2.imshow('imag', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
矩形绘制,将用到cv2.rectangle()——每次调用绘制一个矩形:由一条对角线坐标组成
import cv2
import numpy as np
if __name__ == "__main__":
img = np.zeros((512, 512, 3), np.uint8) # 创建黑色图片
cv2.namedWindow('imag', cv2.WINDOW_NORMAL)
cv2.resizeWindow('imag', 510, 510)
cv2.rectangle(img, (215, 215), (295, 295), (0, 255, 0), 2) # 画绿色矩形
cv2.imshow('imag', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
圆绘制,将用到cv2.circle()——每次调用绘制一个矩形:由一条对角线坐标组成
import cv2
import numpy as np
if __name__ == "__main__":
img = np.zeros((512, 512, 3), np.uint8) # 创建黑色图片
cv2.namedWindow('imag', cv2.WINDOW_NORMAL)
cv2.resizeWindow('imag', 510, 510)
cv2.circle(img, (255, 235), 30, (0, 0, 255), -1) # 画红色圆
cv2.imshow('imag', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
文字绘制,将用到cv2.putText()——每次调用绘制一个矩形:由一条对角线坐标组成
import cv2
import numpy as np
if __name__ == "__main__":
img = np.zeros((512, 512, 3), np.uint8) # 创建黑色图片
cv2.namedWindow('imag', cv2.WINDOW_NORMAL)
cv2.resizeWindow('imag', 510, 510)
cv2.putText(img, 'I LOVE', (144, 190), cv2.FONT_HERSHEY_COMPLEX_SMALL, 3, (255, 255, 255), 2, cv2.LINE_AA)
# 白色文字
cv2.imshow('imag', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果:
将翻转打开——
cv2.putText(img, ‘I LOVE’, (144, 190), cv2.FONT_HERSHEY_COMPLEX_SMALL, 3, (255, 255, 255), 2, cv2.LINE_AA, True)
多边形绘制,将用到cv2.polylines()——每次调用绘制一个矩形:由一条对角线坐标组成
说明一下顶点数组——采用numpy科学数据处理包之一的数组包创建的一个多维数组(矩阵),并且同时规定数据类型为numpy.int32
代码实例如下:
import cv2
import numpy as np
if __name__ == "__main__":
img = np.zeros((512, 512, 3), np.uint8)
cv2.namedWindow('imag', cv2.WINDOW_NORMAL)
cv2.resizeWindow('imag', 520, 520)
pts2 = np.array([[190, 340], [325, 340], [315, 370], [200, 370]], np.int32) # 顶点数组
pts2 = pts2.reshape((-1, 1, 2)) # 多维数组形状
cv2.polylines(img, [pts2], True, (0, 255, 255), 2, cv2.LINE_AA) # 用于多线绘画——布尔型参数为True时,返回多边形;否则为依次连接这些点的一条折线
cv2.imshow('imag', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果:
折线形式:也就是参数三位False时
cv2.polylines(img, [pts2], False, (0, 255, 255), 2, cv2.LINE_AA)
import cv2
import numpy as np
if __name__ == "__main__":
img = np.zeros((512, 512, 3), np.uint8) # 创建黑色图片
cv2.namedWindow('imag', cv2.WINDOW_NORMAL)
cv2.resizeWindow('imag', 510, 510)
cv2.line(img, (0, 0), (510, 510), (255, 0, 0), 5) # 画背景线
cv2.line(img, (0, 510), (510, 0), (255, 0, 0), 5)
cv2.rectangle(img, (215, 215), (295, 295), (0, 255, 0), 2) # 画矩形
cv2.circle(img, (195, 235), 30, (0, 0, 255), -1) # 画圆
cv2.circle(img, (315, 235), 30, (0, 0, 255), -1) # 画圆
pts = np.array([[260, 60], [80, 200], [100, 380], [420, 380], [440, 200]], np.int32) # 顶点数组
pts = pts.reshape((-1, 1, 2)) # 多维数组形状
cv2.polylines(img, [pts], True, (0, 255, 255), 2, cv2.LINE_AA) # 用于多线绘画——布尔型参数为True时,返回多边形;否则为依次连接这些点的一条折线
pts2 = np.array([[190, 340], [325, 340], [315, 370], [200, 370]], np.int32) # 顶点数组
pts2 = pts2.reshape((-1, 1, 2)) # 多维数组形状
cv2.polylines(img, [pts2], True, (0, 255, 255), 2, cv2.LINE_AA) # 用于多线绘画——布尔型参数为True时,返回多边形;否则为依次连接这些点的一条折线
cv2.putText(img, 'I LOVE', (144, 190), cv2.FONT_HERSHEY_COMPLEX_SMALL, 3, (255, 255, 255), 2, cv2.LINE_AA)
cv2.putText(img, 'OpenCV', (87, 310), cv2.FONT_HERSHEY_COMPLEX_SMALL, 4, (255, 255, 255), 2, cv2.LINE_AA)
cv2.imshow('imag', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
在使用opencv绘制图形时,和其它的GUI是一样的,都是对坐标进行处理——但是opencv的魅力在于,我们可以依托这样的绘制在后期的人脸识别以及其它的图像处理时,提供我们清晰的识别提示等帮助!!!
如:判别到人脸,在特征区附近实现矩形的绘制,通过图像反馈得出人脸检测的反馈提示~