计算机视觉基础5---窗口控制和绘图
参考书目:《OpenCV计算机视觉基础教程》–夏帮贵。代码编写:Jupyter Notebook。1.窗口控制cv2.namedWindow()创建窗口格式:cv2.namedWindow(winname[, flags]);winname:窗口名称;flags:表示窗口属性的常量;窗口属性:cv2.WINDOW_NORMAL:用户可以调整窗口大小,无限制;cv2.WINDOW_AUTOSIZE:
·
参考书目:《OpenCV计算机视觉基础教程》–夏帮贵。
代码编写:Jupyter Notebook。
1.窗口控制
cv2.namedWindow()创建窗口
- 格式:cv2.namedWindow(winname[, flags]);
- winname:窗口名称;flags:表示窗口属性的常量;
- 窗口属性:
- cv2.WINDOW_NORMAL:用户可以调整窗口大小,无限制;
- cv2.WINDOW_AUTOSIZE:默认值,用户无法调整窗口大小,窗口大小由显示的图像决定;
- cv2.WINDOW_FULLSCREEN:窗口将全屏显示;
- cv2.WINDOW_GUI_EXPANDED:窗口中可显示状态栏和工具栏;
- cv2.WINDOW_FREERATIO:窗口尽可能显示图片,无比例限制;
- cv2.WINDOW_KEEPRATIO:窗口由图像的比例决定的;
# 1.cv2.namedWindow()函数创建窗口;
import numpy as np
import cv2 as cv
img = np.zeros((480, 640), dtype = np.uint8)
img[200 : 400, 250 : 400] = 255
cv.namedWindow("img1", cv.WINDOW_NORMAL)
cv.imshow("img1", img)
cv.waitKey(0)
# 2.关闭窗口:cv2.destroyAllWindows()和cv2.destroyWindow(winname);
# cv2.destroyAllWindowas():关闭所有窗口;
# cv2.destroyWindows(winname):关闭指定名称(winname)的窗口;
import cv2 as cv
img1 = cv.imread("20.jpg")
img2 = cv.imread("01.jpg")
cv.imshow("J20", img1)
cv.imshow("Logo", img2)
key = cv.waitKey(0) & 0xFF
if key == 27:
cv.destroyAllWindows()
else:
cv.destroyWindow("J20")
cv.waitKey(2000)
cv.destroyAllWindows()
# 3.调整窗口大小:cv2.resizeWindow()函数
import cv2 as cv
img1 = cv.imread("20.jpg")
img1_size = img1.shape
cv.imshow("J20", img1)
cv.waitKey(1000)
cv.resizeWindow("J20", (img1_size[0] // 2, img1_size[1] // 2))
cv.waitKey(0)
2.绘图
# 1.绘制直线:cv2.line()函数
# 语法格式:cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
# 参数说明:
# a.img:用于绘图的图像;
# b.pt1:起点坐标;
# c.pt2:终点坐标;
# d.color:直线颜色;常用BGR颜色空间表示颜色;
# e.thickness:线条粗细;默认值:1,设置为-1时表示绘制填充图形;
# f.lineType:线条类型,默认值:cv2.Line_8;
# 常用线条类型:cv2.FILLED--填充;cv2.LINE_4:4条连接线;cv2.LINE_8:8条连接线;cv2.LINE_AA:抗锯齿线,线条更平滑;
# shift:坐标数值精度;
import cv2 as cv
import numpy as np
img = np.zeros((480, 640, 3), np.uint8)
cv.line(img, (0, 0), (640, 480), (255, 0, 0), 5)
cv.line(img, (640, 0), (0, 480), (0, 255, 0), 5)
cv.imshow("line", img)
cv.waitKey(0)
# 2.绘制矩形:cv2.rectangle()函数
# 语法格式:cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
# 参数说明:
# a.img:用于绘图的图像;
# b.pt1:矩形一个顶点;
# c.pt2:矩形中与pt1相对的另外一个顶点;
# d.color:直线颜色;常用BGR颜色空间表示颜色;
# e.thickness:线条粗细;默认值:1,设置为-1时表示绘制填充图形;
# f.lineType:线条类型,默认值:cv2.Line_8;
# 常用线条类型:cv2.FILLED--填充;cv2.LINE_4:4条连接线;cv2.LINE_8:8条连接线;cv2.LINE_AA:抗锯齿线,线条更平滑;
# shift:坐标数值精度;
import cv2 as cv
import numpy as np
img = np.zeros((480, 640, 3), np.uint8)
cv.rectangle(img, (20, 20), (620, 460), (255, 0, 0), 5)
cv.rectangle(img, (80, 80), (560, 400), (255, 0, 255), 5)
cv.imshow("rectangle", img)
cv.waitKey(0)
import cv2 as cv
img1 = cv.imread("01.jpg")
print(img1.shape)
cv.rectangle(img1, (200, 245), (260, 425), (255, 0, 0), 5)
cv.imshow("LOGO_modify", img1)
cv.waitKey(0)
# 3.绘制圆:cv2.circle()函数
# 语法格式:cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
# 参数说明:
# a.img:用于绘图的图像;
# b.center:圆心坐标;
# c.radius:圆半径;
# d.color:直线颜色;常用BGR颜色空间表示颜色;
# e.thickness:线条粗细;默认值:1,设置为-1时表示绘制填充图形;
# f.lineType:线条类型,默认值:cv2.Line_8;
# 常用线条类型:cv2.FILLED--填充;cv2.LINE_4:4条连接线;cv2.LINE_8:8条连接线;cv2.LINE_AA:抗锯齿线,线条更平滑;
# shift:坐标数值精度;
import cv2 as cv
import numpy as np
img = np.zeros((480, 640, 3), dtype = np.uint8)
cv.circle(img, (320, 240), 100, (255, 0, 0), 5)
cv.circle(img, (320, 240), 150, (0, 255, 0), 5)
cv.circle(img, (320, 240), 200, (0, 0, 255), 5)
cv.imshow("circle", img)
cv.waitKey(0)
# 4.绘制椭圆:cv2.ellipse()函数
# 语法格式:cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])
# 参数说明:
# a.img:用于绘图的图像;
# b.center:椭圆圆心坐标;
# c.axes:椭圆的轴;
# d.angle:椭圆长轴的旋转角度,即长轴与x轴的夹角;
# e.startAngle:圆弧开始的角度;
# f.endAngle:圆弧结束的角度;
# g.color:直线颜色;常用BGR颜色空间表示颜色;
# h.thickness:线条粗细;默认值:1,设置为-1时表示绘制填充图形;
# i.lineType:线条类型,默认值:cv2.Line_8;
# 常用线条类型:cv2.FILLED--填充;cv2.LINE_4:4条连接线;cv2.LINE_8:8条连接线;cv2.LINE_AA:抗锯齿线,线条更平滑;
# j.shift:坐标数值精度;
import numpy as np
import cv2 as cv
img = np.zeros((480, 640, 3), dtype = np.uint8) + 255
cv.ellipse(img, (320, 240), (50, 40), 0, 0, 360, (0, 0, 0), 5)
cv.ellipse(img, (320, 240), (100, 80), 0, 0, 360, (255, 0, 0), 5)
cv.ellipse(img, (320, 240), (200, 160), 0, 180, 360, (0, 255, 0), 5)
cv.ellipse(img, (320, 240), (200, 160), 0, 0, 180, (0, 0, 255), 5)
cv.imshow("ellipse", img)
cv.waitKey(0)
# 5.绘制多边形:cv2.polylines()函数
# 语法格式:cv2.polylines(img, pts, isClosed, color[, thickness,[, lineType[, shift]]])
# 参数说明:
# a.img:用于绘图的图像;
# b.pts:多边形各顶点坐标;
# c.isClosed:True时,绘制闭合多边形;否则,依次连接各顶点,绘制一条曲线;
# d.color:直线颜色;常用BGR颜色空间表示颜色;
# e.thickness:线条粗细;默认值:1,设置为-1时表示绘制填充图形;
# f.lineType:线条类型,默认值:cv2.Line_8;
# 常用线条类型:cv2.FILLED--填充;cv2.LINE_4:4条连接线;cv2.LINE_8:8条连接线;cv2.LINE_AA:抗锯齿线,线条更平滑;
# shift:坐标数值精度;
import cv2 as cv
import numpy as np
img = np.zeros((480, 640, 3), np.uint8) + 255
pts1 = np.array([[20, 20], [400, 20], [200, 240]], np.int32)
pts2 = np.array([[120, 120], [500, 120], [300, 340]], np.int32)
pts3 = np.array([[220, 220], [600, 220], [400, 440]], np.int32)
cv.polylines(img, [pts1], True, (255, 0, 0), 5)
cv.polylines(img, [pts2], True, (0, 255, 0), 5)
cv.polylines(img, [pts3], True, (0, 0, 255), 5)
cv.imshow("polylines", img)
cv.waitKey(0)
# 6.绘制文本:cv2.putText()函数
# 语法格式:cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]])
# 参数说明:
# a.img:用于绘图的图像;
# b.text:要绘制的文本;
# c.org:文本左下角的位置;
# d.fontFace:字体类型;
# fontFace字体类型:
# 1.cv2.FONT_HERSHEY_SIMPLEX:正常大小的sans-serif字体;
# 2.cv2.FONT_HERSHEY_PLAIN:小号的sans-serif字体;
# 3.cv2.FONT_HERSHEY_DUPLEX:较复杂的正常大小的sans-serif字体;
# 4.cv2.FONT_HERSHEY_COMPLEX:正常大小的serif字体;
# 5.cv2.FONT_HERSHEY_TRIPLEX:较复杂的正常大小的serif字体;
# 6.cv2.FONT_HERSHEY_COMPLEX_SMALL:简化版正常大小的serif字体;
# 7.cv2.FONT_HERSHEY_SCRIPT_SIMPLEX:手写风格字体;
# 8.cv2.FONT_HERSHEY_SCRIPT_COMPLEX:较复杂的手写风格字体;
# 9.cv2.FONT_ITALIC:斜体;
# e.fontScale:字体大小;
# f.color:直线颜色;常用BGR颜色空间表示颜色;
# g.thickness:线条粗细;默认值:1,设置为-1时表示绘制填充图形;
# h.lineType:线条类型,默认值:cv2.Line_8;
# 常用线条类型:
# 1.cv2.FILLED--填充;
# 2.cv2.LINE_4:4条连接线;
# 3.cv2.LINE_8:8条连接线;
# 4.cv2.LINE_AA:抗锯齿线,线条更平滑;
# i:bottomLeftOrigin:文本方向,默认值:False;设置为True时,文本为垂直镜像效果;
import numpy as np
import cv2 as cv
img = np.zeros((350, 960, 3), np.uint8) + 255
font = cv.FONT_HERSHEY_SCRIPT_SIMPLEX
cv.putText(img, "Welcome to FUXI Technology.", (50, 150), font, 2, (255, 0, 0), 2, cv.LINE_AA)
cv.putText(img, "I am Willard.", (50, 250), font, 2, (255, 0, 0), 2, cv.LINE_AA)
cv.imshow("Text", img)
cv.waitKey(0)
# 使用PIL模块绘制汉字
import numpy as np
import cv2 as cv
from PIL import ImageFont, ImageDraw, Image
img = np.zeros((200, 640, 3), np.uint8) + 255
fontpath = "STSONG.TTF"
font1 = ImageFont.truetype(fontpath, 36)
img_pil = Image.fromarray(img)
draw = ImageDraw.Draw(img_pil)
draw.text((150, 60), "伏羲科技(湖北·武汉)", font = font1, fill = (0, 0, 0))
img = np.array(img_pil)
cv.imshow("China", img)
cv.waitKey(0)
# 7.绘制箭头:cv2.arrowedLine()函数;
# 语法格式:cv2.arrowedLine(img, pt1, pt2, color[, thickness[, lineType[, shift[, tipLength]]]])
# 参数说明:
# a.img:用于绘图的图像;
# b.pt1:起点坐标;
# c.pt2:终点坐标;
# d.color:直线颜色;常用BGR颜色空间表示颜色;
# e.thickness:线条粗细;默认值:1,设置为-1时表示绘制填充图形;
# f.lineType:线条类型,默认值:cv2.Line_8;
# 常用线条类型:cv2.FILLED--填充;cv2.LINE_4:4条连接线;cv2.LINE_8:8条连接线;cv2.LINE_AA:抗锯齿线,线条更平滑;
# g.shift:坐标数值精度;
# h.tipLength:箭尖相对于箭头长度比例,默认值:0.1;
import cv2 as cv
import numpy as np
img = np.zeros((480, 640, 3), np.uint8) + 255
cv.arrowedLine(img, (80, 80), (400, 80), (255, 0, 0), 3)
cv.arrowedLine(img, (80, 80), (80, 400), (255, 0, 0), 3)
cv.imshow("arrowedline", img)
cv.waitKey(0)
import cv2 as cv
import numpy as np
img = np.zeros((480, 640, 3), np.uint8) + 255
cv.arrowedLine(img, (320, 240), (160, 370), (0, 0, 255), 3)
cv.arrowedLine(img, (320, 240), (600, 240), (0, 255, 0), 3)
cv.arrowedLine(img, (320, 240), (320, 10), (255, 0, 0), 3)
cv.imshow("arrowedline", img)
cv.waitKey(0)
更多推荐
所有评论(0)