VS 无法解析的外部符号 "void __cdecl cv::imshow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class cv::debug_buil
时间: 2023-08-24 09:04:11 浏览: 463
这个错误表明编译器在链接过程中无法找到相关的函数或符号。在这种情况下,错误是关于OpenCV函数`cv::imshow`的外部符号无法解析。
要解决这个问题,你需要确保正确设置了OpenCV库的链接。请按照以下步骤进行操作:
1. 确保已经正确安装了OpenCV,并且已经配置了开发环境,包括设置了正确的包含目录和库目录。
2. 在Visual Studio中,右键点击你的项目,选择 "属性"。
3. 在属性窗口中,选择 "配置属性" -> "VC++目录",确保 "包含目录" 和 "库目录" 设置为正确的OpenCV目录。
4. 在属性窗口中,选择 "配置属性" -> "链接器" -> "输入",在 "附加依赖项" 中添加所需的OpenCV库文件名,比如`opencv_worldXXX.lib`(XXX代表版本号)。
5. 确保你的源代码中包含了正确的OpenCV头文件和命名空间,比如:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
```
6. 编译并运行你的项目,看看是否成功解决了链接错误。
如果仍然遇到问题,请确保你正确地安装和配置了OpenCV,并且检查你的项目设置是否正确。如果问题仍然存在,请提供更多的错误信息以便更好地帮助你解决问题。
相关问题
error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::_List_iterator<class std::_List_val<class PartBaseInfo *,class std::allocator<class PartBaseInfo *> > > __cdecl PartBaseInfoSet::Begin(void)" (__imp_?Begin@PartBaseInfoSet@@QEAA?AV?$_List_iterator@V?$_List_val@PEAVPartBaseInfo@@V?$allocator@PEAVPartBaseInfo@@@std@@@std@@@std@@XZ)
这个错误是链接错误,提示无法解析外部符号。这通常是因为编译器找不到符号的定义。可能是因为你在使用某个函数或变量,但是没有包含相应的头文件或库文件,或者库文件没有正确链接。
针对你的问题,可能是你在使用PartBaseInfoSet类中的Begin函数,但是编译器找不到这个函数的定义。你需要检查你的代码,确认是否正确地包含了PartBaseInfoSet类的头文件,并且链接了相应的库文件。如果确认无误,还需要检查库文件是否正确地被加入到了链接器的输入文件列表中。
报错 cv2.imwrite(r'./pgd_img/adver_results/{}.jpg'.format(i), np.transpose(adv_imgs), (1, 2, 0)) cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:738: error: (-2:Unspecified error) in function 'bool __cdecl cv::imwrite_(const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::vector<class cv::Mat,class std::allocator<class cv::Mat> > &,const class std::vector<int,class std::allocator<int> > &,bool)' > Encoding 'params' must be key-value pairs: > '(params.size() & 1) == 0' > where > 'params.size()' is 3
这个报错提示参数设置有误,具体来说是imwrite函数的第三个参数不符合要求。根据报错信息,看起来是传递的参数列表长度不符合要求,需要使用key-value pairs来设置参数。建议检查一下传递给imwrite函数的第三个参数是否正确,应该使用一个字典来设置参数,其中包含图像的编码方式、压缩质量等参数。例如可以这样设置:
```
cv2.imwrite(r'./pgd_img/adver_results/{}.jpg'.format(i), np.transpose(adv_imgs, (1, 2, 0)), params={"quality": 100})
```
其中,quality表示JPEG图像的压缩质量,取值范围是0-100,100表示无损压缩。经过上述修改后,应该就可以成功保存图像了。
阅读全文