资讯专栏INFORMATION COLUMN

2.opencv——图像用户界面操作

YPHP / 1505人阅读

摘要:图像用户界面操作窗口操作创建窗口关闭和调整窗口绘图绘制直线绘制矩形绘制圆绘制椭圆绘制多边形绘制文本绘制箭头响应鼠标事件使用跟踪栏实验使用鼠标指针取点绘图窗口操作创建窗口函数在显示图像时,指定的窗口如果不存在

窗口操作

1.创建窗口

/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)

2.关闭和调整窗口

/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提供的绘图函数可用于绘制直线,矩形,圆,椭圆,多边形以及文本等。

1.绘制直线

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)

2.绘制矩形

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)

3. 绘制圆

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)

4.绘制椭圆

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)

5.绘制多边形

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)

6.绘制文本

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)

7.绘制箭头

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 和 OpenCV 整合开发总结(3) 这一节的主要内容是OpenCV在Android NDK开发中的应用,包括下面几个方面的内容: 如何实现Static Initialization从而不需要安装...

    ZHAO_ 评论0 收藏0
  • OpenCV-Python计算机视觉函数

    摘要:如果不设置这个,图片只会一瞬间显示,就消失了。括号里面也可以设置显示时长。 目录 1、概述 2、OpenCV基础 读取图片 imread 调整显示窗口大小 resizeWindow 调整图像尺寸大小 resize 色彩空间进行转换 cvtColor 绘制线段 line 绘制矩形框 recta...

    levius 评论0 收藏0
  • [译]OpenCV Text Detection (EAST text detector)

    摘要:的文本检测器是一种基于新颖架构和训练模式的深度学习模型。深度学习文本检测器图文本检测全卷积网络的结构等人的图。随着和的发布,我们现在可以使用一种名为的基于深度学习的文本检测器,它基于等人的年论文一种高效精确的场景文本检测器。 by Adrian Rosebrock on August 20, 2018 in Deep Learning, Optical Character Recogn...

    VincentFF 评论0 收藏0
  • Python 计算机视觉(二) —— OpenCV 基础

    摘要:目录安装配置安装配置基础语法基础语法读取图像并显示读取图像并显示调整显示窗口大小调整显示窗口大小调整图像尺寸大小调整图像尺寸大小图像灰度处理图像灰度处理几何图形绘制几何图形绘制绘制线段绘制线段绘制矩形 目录 1. 安装配置 2. OpenCV 基础语法 (1)读取图像并显示  (2)调整显示...

    mist14 评论0 收藏0
  • Python:SIFT算法的实现

    摘要:安装我们可以使用库中的函数实现,但由于专利保护,很多版本的库已无法提供该函数,目前仅版本的库可使用此函数。算法选择其中最优的四个点程序结果 本文侧重于如何使用Pyt...

    Lsnsh 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<