opencv imshow窗口置顶

问题:

我的开发环境是Linux,使用opencv-python开发视觉处理,由于我的设备是没有键盘的,无法通过按键关闭窗口,因此需要点击窗口右上角的“x”来关闭imshow出来的弹窗。但是“x”很小,有时会不小心点击到弹窗以外的地方,imshow出来的弹窗就会被隐藏在后面,并且当前界面也无法操作,导致整个设备看起来像“卡住”,无法操作。

解决办法:

使用opencv的函数可以把imshow出来的窗口置顶,这样误触也不会把窗口隐藏到后面去。代码如下:

# 一般显示代码如下:cv.waitKey()仅能接收按键的信号,仅能通过按键关闭窗口
		# 假设前面已经import cv2 as cv
		src = cv.imread("1.bmp", 1)
        cv.namedWindow("image", 0)
        cv.resizeWindow("image", 640, 480)
        cv.imshow("image", src)
        cv.waitKey()


# 第一次优化:通过while循环,判断是否有按键信号,和判断窗口是否被关闭,
# 此时imshow出来的窗口可以用按键信号关闭,也可以使用鼠标点击右上角的“x”关闭
# 但是此时会出现点击窗口外的区域会使窗口隐藏在后面无法点击关闭的问题
		# 假设前面已经import cv2 as cv
		src = cv.imread("1.bmp", 1)
		cv.namedWindow("image", 0)
        cv.resizeWindow("image", 640, 480)
        cv.imshow("image", src)
        while True:
            if cv.waitKey(100) != -1:		# 等待100ms看是否有按键信号输入,有则结束while循环
                break
            if cv.getWindowProperty('image', cv.WND_PROP_VISIBLE) < 1: 		# 判断“image”窗口是否还存在,如果点击右上角的“x”关闭了,则结束while循环
                break


# 第二次优化:使用cv.setWindowProperty()函数使窗口置顶
# 至此,窗口既可以使用按键关闭,也可以使用鼠标点击关闭,也不会出现窗口隐藏到后面的问题
		# 假设前面已经import cv2 as cv
		src = cv.imread("1.bmp", 1)
		cv.namedWindow("image", 0)
		cv.setWindowProperty("image", cv.WND_PROP_TOPMOST, 1) 	# 设置窗口置顶
        cv.resizeWindow("image", 640, 480)
        cv.imshow("image", src)
        while True:
            if cv.waitKey(100) != -1:
                break
            if cv.getWindowProperty('image', cv.WND_PROP_VISIBLE) < 1: 	
            	break

猜你喜欢

转载自blog.csdn.net/weixin_44650358/article/details/131109081
今日推荐