cv2.namedWindow('viz', cv2.WINDOW_NORMAL, (800, 600)) TypeError: namedWindow() takes at most 2 arguments (3 given)
时间: 2024-09-28 16:07:35 浏览: 34
这个错误提示 `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。记得检查一下其他的调用是否也有多余的参数。
相关问题
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[31], line 8 6 print('sample:',x.shape,y.shape) 7 if __name__ == '__main__': ----> 8 main() Cell In[31], line 5, in main() 2 viz= visdom.Visdom() 4 db = Pokemon('pokemon',224,'train') #因为在当前文件夹下只需要文件名 ----> 5 x,y = next(iter(db)) 6 print('sample:',x.shape,y.shape) Cell In[30], line 87, in Pokemon.__getitem__(self, idx) 76 img, label = self.images[idx], self.labels[idx] 77 tf = transforms.Compose([ 78 lambda x:Image.open(img).convert('RGB'), #string path=>image data 79 transforms.Resize((self.resize,self.resize)), (...) 85 """ 86 ]) ---> 87 img = tf(img) 88 label = torch.tensor(label) 89 return img,label File D:\Anaconda\envs\gpu_pytorch\lib\site-packages\torchvision\transforms\transforms.py:95, in Compose.__call__(self, img) 93 def __call__(self, img): 94 for t in self.transforms: ---> 95 img = t(img) 96 return img TypeError: 'str' object is not callable
这个错误是由于在你的代码中使用了一个字符串对象作为函数调用。具体而言,在你的代码的第87行,你尝试将一个字符串路径传递给`transforms.Compose`,但是它期望接收一个可调用的对象。
要解决这个问题,你需要确保你传递给`transforms.Compose`的是一个可调用的对象,而不是一个字符串。你可以使用`transforms.ToPILImage()`函数将路径转换为图像数据对象,然后再将其传递给`transforms.Compose`。以下是修改后的代码示例:
```python
from PIL import Image
import torchvision.transforms as transforms
tf = transforms.Compose([
transforms.ToPILImage(),
lambda x: x.convert('RGB'),
transforms.Resize((self.resize, self.resize)),
# 其他转换操作
])
img = tf(img)
```
通过这样的修改,你应该能够解决这个错误并继续运行你的代码。
ubuntu编译opencv3.1时,报错usr/bin/ld: ../../lib/libopencv_viz.so.3.1.0: undefined reference to `vtkSTLReader::New()'
当你在Ubuntu上尝试编译OpenCV 3.1时遇到这个错误,它表明链接过程中找不到`vtkSTLReader::New()`函数的定义,这是因为在OpenCV的Viz模块中依赖了某个名为vtkSTLReader的类,而编译过程中可能缺少了vtk (VisTK)库的相关链接。
解决这个问题需要按照以下步骤操作:
1. 确保已经安装了VisTK库及其开发文件。你可以通过命令行运行以下命令来检查:
```
sudo apt-get update
sudo apt-get install libvtk5-dev
```
2. 如果上面的包不存在或者版本过旧,你可能需要从源代码编译安装。首先,下载VisTK源码并编译,然后配置OpenCV时指定VTK路径。
3. 在cmake命令中添加对VTK的支持,例如:
```bash
cmake -DWITH_VTK=ON -DVTK_DIR=/path/to/vtk/installation ..
```
其中 `/path/to/vtk/installation` 需替换为你实际的VTK安装目录。
4. 接着按照正常流程继续编译OpenCV:
```
make
sudo make install
```
如果以上步骤都已完成但问题依然存在,你可能需要检查其他依赖项是否正确设置,或者确认cmake配置无误。有时候,清理和重建缓存也可能会有所帮助。
阅读全文