我有一个我打开的图像路径列表并显示使用它:
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>
第一个在中心屏幕打开,第二个在右边和底部稍微打开,依此类推,直到达到某种极限并跳到一些看不见的左上角帧。为什么会这样?
答案 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"
字符串永远不会显示给用户,因此您可以在此处使用任何您想要的唯一字符串。