cv2.namedWindow(name, cv2.WINDOW_NORMAL)
时间: 2024-05-25 22:09:59 浏览: 149
这个函数是 OpenCV 中创建窗口的函数,它有两个参数:窗口名称和窗口标志。其中第二个参数 cv2.WINDOW_NORMAL 表示创建一个可调整大小的窗口,可以通过拖动边缘来调整窗口的大小。如果使用默认参数 cv2.WINDOW_AUTOSIZE,则创建的窗口大小是固定的,无法调整大小。此函数只是创建一个空白的窗口,如果需要显示图像或视频,则需要使用 cv2.imshow() 函数。
相关问题
cv2.namedWindow('viz', cv2.WINDOW_NORMAL, (800, 600)) TypeError: namedWindow() takes at most 2 arguments (3 given)
这个错误提示 `TypeError: namedWindow() takes at most 2 arguments (3 given)` 表明你在调用 `cv2.namedWindow()` 函数时传入了超过两个参数,而该函数通常只需要一个或两个参数。
`cv2.namedWindow(name, flags=0)` 这里有两个参数:
1. `name`:字符串类型,是你想要创建的窗口的名称。
2. `flags`:可选参数,是一个整数,指定窗口的一些特性,如是否自动调整大小(`cv2.WINDOW_NORMAL`)、是否不可见(`cv2.WINDOW_HIDDEN`)等。
在你提供的代码中,第三个参数 `(800, 600)` 应该作为一个元组,表示窗口的初始大小,而不是额外的命名窗口的标志。所以正确的调用应该是:
```python
cv2.namedWindow('viz', cv2.WINDOW_NORMAL)
cv2.setWindowSize((800, 600)) # 设置窗口初始大小
```
或者是
```python
cv2.namedWindow('viz', cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO, (800, 600)) # 如果你想保持原始尺寸比例
```
这样应该可以避免TypeError。记得检查一下其他的调用是否也有多余的参数。
def start(): global img, pre_pts try: root = tk.Tk() root.withdraw() f_path = filedialog.askopenfilename() if not f_path: messagebox.showinfo('提示', '请选取有效图片') else: img = cv.imread(f_path) pre_pts = -1, -1 cv.namedWindow('picture', cv.WINDOW_NORMAL) cv.resizeWindow('picture', 256, 256) cv.moveWindow('picture', 600, 300) cv.imshow('picture', img) cv.setMouseCallback('picture', draw) cv.waitKey(0) cv.destroyAllWindows() root.destroy() except Exception as e: print("出现错误:", e)上述代码报错时,下列主界面会卡住并退出程序:class Faceshow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(Faceshow, self).__init__(parent) self.setupUi(self) self.main_button.clicked.connect(start) self.main_exit.clicked.connect(self.quit) def quit(self): self.close() if __name__ == '__main__': hxz = QApplication(sys.argv) ui = Faceshow() ui.show() sys.exit((hxz.exec_()))
可能是因为出现了异常,但是异常没有被捕获,导致程序直接退出。你可以在 `start()` 函数中加上异常处理,例如用 `try...except` 块包裹代码,打印出错误信息,然后使程序继续运行。这样就可以避免程序直接退出。修改后的代码如下:
```
def start():
global img, pre_pts
try:
root = tk.Tk()
root.withdraw()
f_path = filedialog.askopenfilename()
if not f_path:
messagebox.showinfo('提示', '请选取有效图片')
else:
img = cv.imread(f_path)
pre_pts = -1, -1
cv.namedWindow('picture', cv.WINDOW_NORMAL)
cv.resizeWindow('picture', 256, 256)
cv.moveWindow('picture', 600, 300)
cv.imshow('picture', img)
cv.setMouseCallback('picture', draw)
cv.waitKey(0)
cv.destroyAllWindows()
root.destroy()
except Exception as e:
print("出现错误:", e)
traceback.print_exc()
class Faceshow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(Faceshow, self).__init__(parent)
self.setupUi(self)
self.main_button.clicked.connect(start)
self.main_exit.clicked.connect(self.quit)
def quit(self):
self.close()
if __name__ == '__main__':
hxz = QApplication(sys.argv)
ui = Faceshow()
ui.show()
sys.exit((hxz.exec_()))
```
这样程序就不会卡住并退出了,而是会在控制台中打印出错误信息,方便你进行调试。
阅读全文