Python OpenCV – setWindowProperty
在这里,我们将简要地介绍SetWindowProperty()函数及其在python编程语言OpenCV包中的工作实例。
你想动态地改变一个窗口的参数吗?那么,你一定要看看setWindowProperty()函数,它可以改变一个窗口的属性。在这篇文章中,我们将讨论如何在OpenCV中使用setWindowProperty()。
语法:
cv2.namedWindow(windowsName, prop_value)
cv2.setWindowProperty(windowsName, prop_id, prop_value)
参数:
- windowsName。 窗口的名称
- prop_id: 要编辑的窗口属性,如cv2.WINDOW_NORMAL、cv2.WINDOW_KEEPRATIO、cv2.WINDOW_FULLSCREEN等。
- prop_value: 窗口属性的新值,如cv2.WND_PROP_FULLSCREEN, cv2.WND_PROP_AUTOSIZE, cv2.WND_PROP_ASPECT_RATIO等。
逐步实现
Step 1: 首先,导入OpenCV和NumPy库
在这一步,我们只是将所需的库导入到工作的Python环境中,以便根据需要进一步使用其功能。
这里,我们正在导入cv2和Numpy库,cv2是OpenCV包,它帮助我们在环境中调用setWindowPropoerty()函数,此外,Numpy包负责随机的数学运算。
语法:
import cv2
import numpy
Step 2: 现在,创建一个函数nothing来创建轨迹条
在这一步,我们将创建一个名为nothing的函数,它可以作为轨迹条的回调函数。
下面,我们使用createTrackbar()函数创建了一个轨迹条,为此我们需要传递一些用户定义的函数,createTrackbar()函数将根据这些函数执行,因此我们创建了一个nothing函数。
def nothing(x):
pass
Step 3: 然后,创建一个带有黑色图像的窗口
在这一步,我们返回一个新的数组黑色的指定大小的颜色。这里,使用了numpy.zero()函数,它返回一个给定形状和类型的新数组。
- shape : 整数或整数序列
- dtype : 返回数组的数据类型
img = numpy.zeros((300, 512, 3), numpy.uint8)
Step 4: 接下来,给你的GUI应用分配名称
在这一步,我们使用了namedWindow()函数,该函数用于创建一个具有合适名称和大小的窗口,以在屏幕上显示图像和视频。
- window_name: 窗口的名称。
- prop_value: 窗口属性的新值,如cv2.WND_PROP_FULLSCREEN, cv2.WND_PROP_AUTOSIZE, cv2.WND_PROP_ASPECT_RATIO等。
cv2.namedWindow(windowsName, prop_value)
Step 5: 设置GUI应用程序的属性
在这一步,我们将使用setWindowProperty()函数,它可以动态地改变窗口的参数。
- windowsName:窗口的名称。
- prop_id:要编辑的窗口属性,如cv2.WINDOW_NORMAL、cv2.WINDOW_KEEPRATIO、cv2.WINDOW_FULLSCREEN等。
- prop_value:窗口属性的新值,如cv2.WND_PROP_FULLSCREEN, cv2.WND_PROP_AUTOSIZE, cv2.WND_PROP_ASPECT_RATIO等。
cv2.setWindowProperty(windowsName, prop_id, prop_value)
Step 6: 此外,创建一个用于改变颜色的轨迹条
在这一步中,我们使用了一个createTrackbar()函数,该函数用于在OpenCV中创建轨迹条。
cv2.createTrackbar(‘color_track’, ‘image’, 0, 255, nothing)
Step 7: 进一步,设置轨迹条的最大值
在这一步中,我们使用了setTrackbarPos()函数,该函数设置了创建的轨迹条在指定窗口中的位置。这个函数不返回任何东西。
cv2.setTrackbarMax(‘color_track’, ‘image’, #Maximum-Value)
Step 8: 之后,创建一个循环,用于显示图像和轨迹条
在这一步,我们创建一个while循环,持续运行,直到用户按下Escafe按钮。
while(True):
Step 8.1: 接下来,显示图像
在这一步中,我们将显示你在步骤3中创建的黑色图像。
cv2.imshow('image', img)
Step 8.2: 然后,创建一个用于按压和改变窗口的按钮
在这一步中,我们使用waitkey来增加延迟,当用户按下’Escafe’键时停止该功能。
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
Step 8.3: 此外,获得轨迹条的当前位置
在这一步中,我们使用了getTrackbarPos()函数,该函数返回指定的轨迹条的当前位置。这个函数需要两个参数,第一个参数是轨迹条的名称,第二个参数是窗口名称,即轨迹条的父窗口。
color = cv2.getTrackbarPos('color_track', 'image')
Step 8.4: 现在,显示颜色混合
在这一步,我们将根据轨迹条来改变黑色图像的颜色。图像的颜色从黑色变为白色。
img[:] = [color]
Step 9: 最后,关闭并销毁所有的窗口
在这一步中,我们将最终关闭我们到目前为止所打开的所有窗口。它不接受任何参数,也不返回任何东西。
cv2.destroyAllWindows()
Python OpenCV – setWindowProperty 示例
# Python program for setWindowProperty()
#Python OpenCV
# Importing the libraries OpenCV and numpy
import cv2
import numpy
# Create a function 'nothing' for creating trackbar
def nothing(x):
pass
# Creating a window with black image
img = numpy.zeros((300, 512, 3), numpy.uint8)
#Name the GUI app
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
#Set the properties of GUI app
cv2.setWindowProperty('image', cv2.WND_PROP_ASPECT_RATIO,
cv2.WINDOW_FULLSCREEN)
# Creating trackbars for color change
cv2.createTrackbar('color_track', 'image', 0, 255, nothing)
# Create a loop for displaying image and trackbar
while(True):
# Display the image
cv2.imshow('image', img)
# Create a button for pressing and changing
# the window
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
# Get current positions of trackbar
color = cv2.getTrackbarPos('color_track', 'image')
# Display color mixture
img[:] = [color]
# Close the window
cv2.destroyAllWindows()
输出: