Python OpenCV – setWindowProperty

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

输出:

Python OpenCV - setWindowProperty

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程