摘要:图像用户界面操作窗口操作创建窗口关闭和调整窗口绘图绘制直线绘制矩形绘制圆绘制椭圆绘制多边形绘制文本绘制箭头响应鼠标事件使用跟踪栏实验使用鼠标指针取点绘图窗口操作创建窗口函数在显示图像时,指定的窗口如果不存在
/qquad cv2.imshow()函数在显示图像时,指定的窗口如果不存在,则会按默认设置创建一个窗口,窗口大小由图像大小决定,且不能更改。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 | 窗口由图像的比例决定 |
import numpyimport cv2img = numpy.zeros((240, 320), dtype=numpy.uint8) # 创建黑色图像img[70:170, 110:210] = 255 # 设置白色区域cv2.namedWindow("test3-1", cv2.WINDOW_NORMAL) # 创建普通窗口cv2.imshow("test3-1", img) # 在窗口中显示图像cv2.waitKey(0)
/qquad OpenCV 提供了以下两个用于关闭窗口的函数。分别是cv2.destroyAllWindows(),cv2.destroyWindow (winname)。其中cv2.destroyAllWindows()是关闭所有窗口,而cv2.destroyWindow (winname)是关闭指定名称的窗口。
cv2在调整窗口大小上提供了cv2.resizeWindow()函数来更改窗口大小,其基本格式如下。
cv2.resizeWindow(winname,size)
其中,winname 为窗口名称,size 为表示窗口大小的二元组。
import cv2img = cv2.imread("lena.jpg") # 读取图像s = img.shapecv2.imshow("lena", img) # 显示图像key = cv2.waitKey(500)cv2.resizeWindow("lena", (s[0]//2, s[1]//2))cv2.waitKey(0)
/qquad OpenCV提供的绘图函数可用于绘制直线,矩形,圆,椭圆,多边形以及文本等。
cv2提供了cv2.line()函数用于绘制直线,其语法格式如下:
cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
其参数说明如下:
参数 | 解释 |
---|---|
img | 为用于绘制图像的图像 |
pt1 | 为直线段的起点坐标 |
pt2 | 为直线段的终点坐标 |
color | 为直线段的颜色。通常使用 BGR 模型表示颜色,如(255,0,0)表示蓝色 |
thickness | 表示线条粗细。默认值为 1,设置为-1时表示绘制填充图形 |
lineType | 表示线条类型,默认值为 cv2.Line_8。线条类型可设置为以下常量:cv2.FILLED:填充;cv2.LINE_4:4 条连接线;cv2.LINE_8:8条连接线;cv2.LINE_AA:抗锯齿线,线条更平滑。 |
shift | 表示坐标的数值精度,一般情况下不需要设置 |
import numpy as npimport cv2img = np.zeros((200, 320, 3), np.uint8) # 创建一幅黑色图像cv2.line(img, (0, 0), (320, 200), (0, 0, 255), 10) # 画对角线1,红色cv2.line(img, (320, 0), (0, 200), (0, 255, 0), 5) # 画对角线2,绿色cv2.imshow("draw", img) # 显示图像cv2.waitKey(0)
cv2.rectangle()函数用于绘制矩形,其语法格式如下:
cv2.rectangle(img,ptl,pt2,color[,thickness[,linetype[,shift]]])
其参数说明如下:
参数 | 解释 |
---|---|
ing,color, thickness,lineType 和 shift等参数 | 与 cv2.ine()函数中的含义一致 |
pt1 | 为矩形的一个顶点 |
pt2 | 为矩形中与 pt1相对的另一个顶点 |
import numpy as npimport cv2img = np.zeros((200, 320, 3), np.uint8) # 创建一幅黑色图像cv2.rectangle(img, (20, 20), (300, 180), (255, 0, 0), 10) # 画矩形,蓝色边框cv2.rectangle(img, (70, 70), (250, 130), (0, 255, 0), 2) # 画矩形,绿色填充cv2.imshow("draw", img) # 显示图像cv2.waitKey(0)
cv2.circle()函数用于绘制圆,其语法格式如下:
cv2.circle(img,center,radius,color[,thickness[,linetype[,shift]]])
其参数说明如下:
参数 | 解释 |
---|---|
ing,color, thickness,lineType 和 shift等参数 | 与 cv2.ine()函数中的含义一致 |
center | 为圆心坐标 |
radius | 为圆的半径 |
import numpy as npimport cv2img = np.zeros((200, 320, 3), np.uint8) # 创建一幅黑色图像cv2.circle(img, (160, 100), 80, (255, 0, 0), 5) # 画圆,蓝色边框cv2.circle(img, (160, 100), 40, (0, 255, 0), -1) # 画圆,绿色填充cv2.imshow("draw", img) # 显示图像cv2.waitKey(0)
cv2.ellipse()函数用于绘制椭圆,其语法格式如下:
cv2.ellipse(img,center,axes,angle,startAngle,endAngle,color[,thickness[,lineType[, shift]]])
其参数说明如下:
参数 | 解释 |
---|---|
img、color、thickness、lineType 和 shift等参数 | 与 cv2.line()函数中的含义一致 |
center | 为椭圆圆心坐标 |
axes | 为椭圆的轴。例如,(100,50)表示长轴的一半为 100,短轴的一半为 50 |
angle | 为椭圆长轴的旋转角度,即长轴与 x轴的夹角 |
startAngle | 为圆弧的开始角度 |
endAngle | 为圆弧的结束角度。开始角度为 0°,结束角度为 360°时,可绘制完整椭圆,否则为椭圆弧 |
import numpy as npimport cv2img = np.zeros((200, 320, 3), np.uint8)+255 # 创建一幅白色图像cv2.ellipse(img, (160, 100), (120, 50), 0, 0, 360, (255, 0, 0), 5) # 画椭圆,蓝色边框cv2.ellipse(img, (160, 100), (60, 15), 0, 0, 360, (0, 255, 0), 51) # 画椭圆,绿色填充cv2.imshow("draw", img) # 显示图像cv2.waitKey(0)
cv2.polylines()函数用于绘制多边形,其语法格式如下:
cv2.polylines(img, pts, isClosed, color[,thickness[,lineType[, shift]]])
其参数说明如下:
参数 | 解释 |
---|---|
ing,color, thickness,lineType 和 shift等参数 | 与 cv2.ine()函数中的含义一致 |
pts | 为多边形各顶点坐标 |
isClosed | 为True时,绘制封闭多边形;否则依次连接各顶点,绘制一条曲线 |
import numpy as npimport cv2img = np.zeros((200, 320, 3), np.uint8)+255 # 创建一幅白色图像pts = np.array([[160, 20], [20, 100], [160, 180], [300, 100]], np.int32) # 创建顶点cv2.polylines(img, [pts], True, (255, 0, 0), 5) # 画多边形,蓝色边框pts = np.array([[160, 60], [60, 100], [160, 140], [260, 100]], np.int32) # 创建顶点cv2.polylines(img, [pts], False, (0, 255, 0), 1) # 画曲线,绿色边框cv2.imshow("draw", img) # 显示图像cv2.waitKey(0)
cv2.putText()函数用于绘制文本,其语法格式如下:
cv2.putText( img, text, org, fontFace, fontScale, color[, thickness[, lineType[,bottomLeftOrigin]]])
其参数说明如下:
参数 | 解释 |
---|---|
ing,color, thickness,lineType 和 shift等参数 | 与 cv2.ine()函数中的含义一致 |
text | 为要绘制的文本 |
org | 为文本左下角的位置 |
fontFace | 为字体类型,参数值可设置为如下常量 |
cv2.FONT_HERSHEY_SIMPLEX | 正常大小的 sans-serif 字体 |
cv2.FONT_HERSHEY_PLAIN | 小号的 sans-serif 字体 |
cv2.FONT_HERSHEY_DUPLEX | 较复杂的正常大小的 sans-serif 字体 |
cv2.FONT_HERSHEY_COMPLEX | 正常大小的 serif 字体 |
cv2.FONT_HERSHEY_TRIPLEX | 较复杂的正常大小的 serif 字体 |
cv2.FONT_HERSHEY_COMPLEX_SMALL | 简化版正常大小的 serif 字体 |
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX | 手写风格字体 |
cv2.FONT_HERSHEY_SCRIPT_COMPLEX | 较复杂的手写风格字体 |
cv2.FONT_ITALIC | 斜体 |
fontScale | 为字体大小 |
bottomLeftOrigin | 为文本方向,默认值为False;设置为True时,文本为垂直镜像效果 |
cv2.putText()函数不能在图像中绘制中文,但可以使用PIL模块在图像中绘制中文。
首先我们需要安装PIL模块,在cmd命令窗口输出:
pip install Pillow
来安装PIL模块,这里可能会有点小疑惑,为什么不是直接pip install PIL而是Pillow,其实因为没有名为PIL的模块,而出于向后兼容的原因,Pillow仍使用PIL作为其模块名称。所以直接pip install PIL会报错。
import numpy as npimport cv2img = np.zeros((200, 320, 3), np.uint8)+255 # 创建一幅白色图像font = cv2.FONT_HERSHEY_SCRIPT_SIMPLEXcv2.putText(img, "hello", (50, 60), font, 2, (255, 0, 0), 2, cv2.LINE_AA) # 绘制文字cv2.putText(img, "Python", (50, 100), font, 2, (255, 0, 0), 2, cv2.LINE_AA, True) # 绘制镜像文字cv2.imshow("draw", img) # 显示图像cv2.waitKey(0)
from PIL import ImageFont, ImageDraw, Imageimport numpy as npimport cv2img = np.zeros((200,320,3), np.uint8)+255 # 创建一幅白色图像fontpath = "STSONG.TTF" # 指定字体文件名font1 = ImageFont.truetype(fontpath, 36) # 载入字体,设置字号img_pil = Image.fromarray(img) # 转换为PIL支持格式draw = ImageDraw.Draw(img_pil) # 创建Draw对象draw.text((50, 60), "你好,世界", font=font1, fill=(0, 0, 0)) # 绘制文字img = np.array(img_pil) # 转换为图像数组cv2.imshow("draw", img) # 显示图像cv2.waitKey(0)
cv2.arrowedLine()函数用于绘制箭头,其语法格式如下:
cv2.arrowedLine(img, pt1, pt2, color[, thickness[, lineType[,shift[, tipLength]]]])
其参数说明如下:
参数 | 解释 |
---|---|
ing,,pt1,pt2,color, thickness,lineType 和 shift等参数 | 与 cv2.ine()函数中的含义一致 |
tipLength | 为箭尖相对于箭头的比例,默认为0.1 |
import numpy as npimport cv2img = np.zeros((200, 320, 3), np.uint8)+255 # 创建一幅白色图像cv2.arrowedLine(img, (50, 50), (50, 150), (0, 0, 255), 2) # 绘制红色垂直箭头cv2.arrowedLine(img, (50, 50), (300, 50), (0, 0, 255), 2) # 绘制红色水平箭头cv2.imshow("draw", img) # 显示图像cv2.waitKey(0)
OpenCV 可在用户触发鼠标事件时,调用鼠标回调函数完成事件处理。
鼠标回调函数的基本格式如下。
def mouseCallback(event,X,y,flags,param):...
其参数说明如下:
参数 | 说明 |
---|---|
mouseCallback | 为自定义函数名称 |
event | 为调用时传递给函数的鼠标事件对象 |
x和y | 为触发鼠标事件时,鼠标指针在窗口中的坐标(x,y) |
flags | 为触发鼠标事件时,鼠标拖动或键盘按键操作,参数可设置为下列常量 |
cv2.EVENT_LBUTTONDBLCLK | 双击鼠标左键 |
cv2.EVENT_LBUTTONDOWN | 按下鼠标左键 |
cv2.EVENT_LBUTTONUP | 释放鼠标左键 |
cv2.EVENT_MBUTTONDBLCLK | 双击鼠标中键 |
cv2.EVENT_MBUTTONDOWN | 按下鼠标中键 |
cv2.EVENT_MOUSEHWHEEL | 滚动鼠标中键(正、负值表示向左或向右滚动) |
cv2.EVENT_MBUTTONUP | 释放鼠标中键 |
cv2.EVENT_MOUSEWHEEL | 滚动鼠标中键(正、负值表示向前或向后滚动) |
cv2.EVENT_MOUSEMOVE | 鼠标移动 |
cv2.EVENT_RBUTTONDBLCLK | 双击鼠标右键 |
cv2.EVENT_RBUTTONDOWN | 按下鼠标右键 |
cv2.EVENT_RBUTTONUP | 释放鼠标右键 |
cv2.EVENT_FLAG_ALTKEY | 按下【Alt】键 |
cv2.EVENT_FLAG_CTRLKEY | 按下【Ctrl】键 |
cv2.EVENT_FLAG_LBUTTON | 按住鼠标左键拖动 |
cv2.EVENT_FLAG_MBUTTON | 按住鼠标中键拖动 |
cv2.EVENT_FLAG_RBUTTON | 按住鼠标右键拖动 |
cv2.EVENT_FLAG_SHIFTKEY | 按下【Shift】键 |
param | 为传递给回调函数的其他数据 |
cv2.setMouseCallback()用于为图像窗口绑定鼠标回调函数,其基本格式如下:
cv2.setMousecallback(wname, mouseCallback)
其参数说明如下:
参数 | 说明 |
---|---|
wname | 为图像窗口的名称 |
mouseCallback | 为鼠标回调函数名称 |
import numpy as npimport cv2img = np.zeros((200, 320, 3), np.uint8)+255 # 创建一幅白色图像def draw(event, x, y, flag, param): if event == cv2.EVENT_LBUTTONDBLCLK: cv2.circle(img, (x, y), 20, (255, 0, 0), -1) # 双击鼠标左键时画圆 elif event == cv2.EVENT_RBUTTONDBLCLK: cv2.rectangle(img, (x, y), (x+20, y+20), (0, 0, 255), -1) # 双击鼠标右键时画矩形cv2.namedWindow("drawing")cv2.setMouseCallback("drawing", draw)while(True): cv2.imshow("drawing", img) # 显示图像 k = cv2.waitKey(1) if k == 27: # 按【Esc】键时结束循环 breakcv2.destroyAllWindows()
跟踪栏(Trackbar)是 OpenCV 为图像窗口提供的交互工具。用户可以通过跟踪栏中的滑块位置获取特定范围内的值。
cv2.createTrackbar()函数用于创建跟踪栏,其基本格式如下:
cv2,createTrackbar(trackbarname,wname,value,count,onChange,userdata)
其参数说明如下:
参数 | 说明 |
---|---|
trackbarname | 为跟踪栏的名称 |
wname | 为图像窗口的名称 |
value | 为跟踪栏中滑块的初始位置 |
count | 为跟踪栏的最大值,最小值为 0. |
onChange | 为跟踪栏滑块位置变化时调用的回调函数名称 |
userdata | 为传递给回调函数的其他可选数据 |
cv2.getTrackbarPos()函数用于返回跟踪栏的当前值,其基本格式如下:
retval=cv2.getTrackbarPos(trackbarname, wname)
其参数说明如下:
参数 | 说明 |
---|---|
i trackbarname | 为跟踪栏的名称 |
wname | 为图像窗口的名称 |
import numpy as npimport cv2img = np.zeros((120, 400, 3), np.uint8) # 创建一幅黑色图像def doChange(x): b = cv2.getTrackbarPos("B", "trakbar") g = cv2.getTrackbarPos("G", "trakbar") r &
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/121806.html
摘要:本文主要是介绍了和开发环境的搭建,以及基于示例程序的演示。使用的方式是将作为库,然后调用。比较时使用的都是基本图像处理操作,例如灰度化,高斯模糊,边缘检测等等。 Android NDK 和 OpenCV 整合开发总结(3) 这一节的主要内容是OpenCV在Android NDK开发中的应用,包括下面几个方面的内容: 如何实现Static Initialization从而不需要安装...
摘要:如果不设置这个,图片只会一瞬间显示,就消失了。括号里面也可以设置显示时长。 目录 1、概述 2、OpenCV基础 读取图片 imread 调整显示窗口大小 resizeWindow 调整图像尺寸大小 resize 色彩空间进行转换 cvtColor 绘制线段 line 绘制矩形框 recta...
摘要:的文本检测器是一种基于新颖架构和训练模式的深度学习模型。深度学习文本检测器图文本检测全卷积网络的结构等人的图。随着和的发布,我们现在可以使用一种名为的基于深度学习的文本检测器,它基于等人的年论文一种高效精确的场景文本检测器。 by Adrian Rosebrock on August 20, 2018 in Deep Learning, Optical Character Recogn...
摘要:目录安装配置安装配置基础语法基础语法读取图像并显示读取图像并显示调整显示窗口大小调整显示窗口大小调整图像尺寸大小调整图像尺寸大小图像灰度处理图像灰度处理几何图形绘制几何图形绘制绘制线段绘制线段绘制矩形 目录 1. 安装配置 2. OpenCV 基础语法 (1)读取图像并显示 (2)调整显示...
摘要:安装我们可以使用库中的函数实现,但由于专利保护,很多版本的库已无法提供该函数,目前仅版本的库可使用此函数。算法选择其中最优的四个点程序结果 本文侧重于如何使用Pyt...
阅读 2604·2021-11-23 09:51
阅读 3384·2021-10-08 10:17
阅读 1114·2021-10-08 10:05
阅读 1506·2021-10-08 10:05
阅读 822·2021-09-28 09:36
阅读 1629·2021-09-13 10:30
阅读 1992·2021-08-17 10:12
阅读 1504·2019-08-30 15:54