Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 绘制一个简单的图像,显示它,然后关闭它_Python_Image_Opencv - Fatal编程技术网

Python 绘制一个简单的图像,显示它,然后关闭它

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,

我想画一些简单的画。我想使用opencv(cv2),因为在第二个项目中,我必须显示一个小动画(矩形,大小取决于变量;每X秒更新一次)。但是,我没有使用图像处理库和opencv的经验

我遇到了很多问题,其中之一是我不知道如何显示/关闭图像。我创造的图像是一个简单的固定十字架,黑色;在浅灰色背景上:

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毫秒的时间将过去,在此期间不会发生任何事情;但在那之后,我可以做任何我想做的事情,直到我关上“视觉”窗口?我是否可以仅仅替换“视觉”的内容,还是必须关闭它并用新图像打开新内容?