android studio 编译报错 ld: error: undefined symbol: cv::imwrite(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>,
时间: 2023-08-28 18:05:42 浏览: 352
这个错误是因为在编译的时候找不到 `cv::imwrite` 这个函数的定义。解决这个问题的方法是:
1. 确认你已经正确引入了 OpenCV 库,并且在代码中正确地包含了头文件。
2. 检查你的编译选项是否正确。在 Android Studio 中,你可以通过修改 `build.gradle` 文件来配置编译选项。确保你已经添加了正确的链接库和头文件路径。
3. 检查你的代码中是否正确地使用了 `cv::imwrite` 函数。如果你的代码中有拼写错误或者参数传递错误等问题,也可能导致链接出错。
如果你仍然无法解决这个问题,请提供更多的代码和错误信息,这样我才能更好地帮助你解决问题。
相关问题
widget.obj:-1: error: LNK2019: 无法解析的外部符号 "bool __cdecl cv::imwrite(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class cv::debug_build_guard::_InputArray const &,class std::vector<int,class std::allocator<
这个错误通常表示链接器无法找到OpenCV库的实现,导致在编译时无法解析cv::imwrite函数。解决此问题的步骤如下:
1. 确保已经正确地配置了OpenCV库。你需要在Qt项目中正确地链接OpenCV库,并在代码中包含正确的头文件。例如:
```
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
```
2. 确认你的代码中没有使用旧版本的cv::imwrite函数。在OpenCV 3.0及以上版本中,cv::imwrite函数的参数发生了变化。应该使用以下函数:
```
cv::imwrite("filename.jpg", image, cv::IMWRITE_JPEG_QUALITY);
```
其中,第三个参数指定了JPEG的压缩质量,可以根据需要进行调整。
3. 确认你的项目中包含了正确的OpenCV库文件。在Qt项目中,你需要在.pro文件中添加以下行:
```
LIBS += -lopencv_core -lopencv_imgcodecs
```
这将链接OpenCV核心库和图像编解码库。
希望这些步骤可以帮助你解决问题。
报错 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表示无损压缩。经过上述修改后,应该就可以成功保存图像了。
阅读全文