更改标题

时间:2018-02-13 15:02:52

标签: python image opencv

我有一个我打开的图像路径列表并显示使用它:

    for path in image_paths:
        print 'Path for the this image is: "{}"'.format(path)
        img = cv2.imread(path)
        cv2.imshow("",img)
        cv2.waitKey(250)
        cv2.destroyAllWindows()

它会在屏幕的中心位置打开每个图像250毫秒,并按预期移动到下一个图像。当我将cv2.imshow("",img)的第一个参数更改为cv2.imshow("image {}".format(path[-7:-4]),img),其中shuold显示标题“图像001”,“图像XYZ”等等时,图像会以不同方式打开:< / p>

第一个在中心屏幕打开,第二个在右边和底部稍微打开,依此类推,直到达到某种极限并跳到一些看不见的左上角帧。为什么会这样?

2 个答案:

答案 0 :(得分:2)

cv2.imshow()在窗口中显示图像,但第一个参数(窗口标题)用于创建不同的窗口。

当对cv2.imshow()的多次调用使用相同的窗口标题时,如:

cv2.imshow("",img)

OpenCV创建一个单独的窗口(空名称),每次必须显示新图像时都会重复使用。

另一方面,在循环中调用cv2.imshow("image {}".format(path[-7:-4]), img)将为循环的每次迭代生成不同的窗口标题,从而在每次调用时创建一个新窗口。所以你所看到的是预期的行为!

如果您希望多个窗口显示在屏幕的同一位置,只需在cv2.moveWindow()后使用相应的屏幕坐标调用cv.imshow()

window_title = "image {}".format(path[-7:-4])
cv2.imshow(window_title, img)
cv2.moveWindow(window_title, 0, 0)

答案 1 :(得分:1)

cv2.imshow() 在窗口中显示图像,并将标识符作为第一个参数传递。如果不存在这样的窗口,则创建它并将其标题设置为标识符。

注意窗口标识符和窗口标题一般是不同的东西!如果您想在同一个窗口中显示多个图像,但标题不同,您可以在 imshow 中使用一些固定字符串。然后您调用 cv2.setWindowTitle 将标题更新为您想要的任何内容。

window_title = "image {}".format(path[-7:-4])
cv2.imshow("unique_window_identifier", img)
cv2.setWindowTitle("unique_window_identifier", window_title)

使用另一个 imshow 调用可以更新图像,使用另一个 setWindowTitle 调用可以更新标题:

cv2.imshow("unique_window_identifier", img2)
cv2.setWindowTitle("unique_window_identifier", window_title2)

请注意,"unique_window_identifier" 字符串永远不会显示给用户,因此您可以在此处使用任何您想要的唯一字符串。