Python 绘制一个简单的图像,显示它,然后关闭它
我想画一些简单的画。我想使用opencv(cv2),因为在第二个项目中,我必须显示一个小动画(矩形,大小取决于变量;每X秒更新一次)。但是,我没有使用图像处理库和opencv的经验 我遇到了很多问题,其中之一是我不知道如何显示/关闭图像。我创造的图像是一个简单的固定十字架,黑色;在浅灰色背景上:Python 绘制一个简单的图像,显示它,然后关闭它,python,image,opencv,Python,Image,Opencv,我想画一些简单的画。我想使用opencv(cv2),因为在第二个项目中,我必须显示一个小动画(矩形,大小取决于变量;每X秒更新一次)。但是,我没有使用图像处理库和opencv的经验 我遇到了很多问题,其中之一是我不知道如何显示/关闭图像。我创造的图像是一个简单的固定十字架,黑色;在浅灰色背景上: import numpy as np import cv2 screen_width = 1024 screen_height = 768 img = np.zeros((screen_height,
import numpy as np
import cv2
screen_width = 1024
screen_height = 768
img = np.zeros((screen_height, screen_width, 3), np.uint8) # Black image
img = img + 210 # light gray
screen_center = (screen_width//2, screen_height//2)
rect_width = int(0.2*screen_width)
rect_height = int(0.02*screen_height)
xP1 = screen_center[0] - rect_width//2
yP1 = screen_center[1] + rect_height//2
xP2 = screen_center[0] + rect_width//2
yP2 = screen_center[1] - rect_height//2
cv2.rectangle(img, (xP1, yP1), (xP2, yP2), (0, 0, 0), -1)
xP1 = screen_center[0] - rect_height//2
yP1 = screen_center[1] + rect_width//2
xP2 = screen_center[0] + rect_height//2
yP2 = screen_center[1] - rect_width//2
cv2.rectangle(img, (xP1, yP1), (xP2, yP2), (0, 0, 0), -1)
注:如果有更好的方法来创建它,我也很感兴趣:)
我的目标是使第一个项目具有以下代码结构:
img = load_saved_img() # The created fixation cross
display_image()
add_text_to_image('texte to add')
# do stuff
# for several minutes
while something:
do_this()
remove_text_from_image() # Alternatively, go back to the initial image/change the image
# do stuff
# for several minutes
while something:
do_this()
close_image()
我知道我可以使用cv2.putText()
添加文本,这样我就可以用文本创建第二个图像。我不知道的是如何管理不同图像的显示;尤其是在一个轻量级的时尚,而“做的东西”的背景。大多数人似乎使用cv2.waitKey()
,这不适合,因为我不想有任何用户输入,而且它似乎类似于time.sleep()
,在此期间程序基本暂停
欢迎任何提示,即使是在其他库和实现上:)正如@Miki所建议的那样,
.imshow()
和.waitKey(1)
的组合正在发挥作用
cv2.imshow(window, img)
cv2.waitKey(1)
但是,这些不能与time.sleep()
一起用于暂停程序。有时,显示将不会更新。例如,在3秒倒计时时:
import time
import cv2
window = 'Name of the window'
def countdown(window, images):
"""
images = [image3, image2, image1]
"""
for img in images:
cv2.imshow(window, img)
cv2.waitKey(1)
time.sleep(1)
有时会跳过其中一个显示。相反,将
cv2.waitKey()
的参数更改为1000
(需要计时器),如果在此期间不需要键盘输入,则删除时间
模块的使用效果最好。imshow(…)+waitKey(1)@Miki waitKey中的参数不是以毫秒为单位的睡眠计时器吗?在您的示例中,当处于睡眠模式且不执行任何操作时,它将在1毫秒内显示图像?是的,但需要刷新OS绘制事件。没有别的办法了around@Miki试了一下后。。这是否意味着一旦调用了cv2.imshow('Visual',Visual.img)和cv2.waitKey(1);1毫秒的时间将过去,在此期间不会发生任何事情;但在那之后,我可以做任何我想做的事情,直到我关上“视觉”窗口?我是否可以仅仅替换“视觉”的内容,还是必须关闭它并用新图像打开新内容?