cv::Mat转const char*
时间: 2024-03-17 20:47:36 浏览: 229
将一个 `cv::Mat` 对象转换为 `const char*`,需要将 `cv::Mat` 的数据以某种方式编码为字符序列。
以下是将 `cv::Mat` 转换为 `const char*` 的一种方法:
```cpp
cv::Mat image;
// 加载图像
// 转换为 JPEG 格式的字符序列
std::vector<uchar> buffer;
cv::imencode(".jpg", image, buffer);
const char* image_data = reinterpret_cast<const char*>(buffer.data());
```
这将把 `cv::Mat` 对象转换为 JPEG 格式的字符序列,并将其赋值给 `image_data`。可以使用其他编码格式进行转换。
相关问题
报错 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表示无损压缩。经过上述修改后,应该就可以成功保存图像了。
class cv::Mat __cdecl cv::imread(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (?imread@cv@@YA?AVMat@1@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z),该符号在函数 main 中被引用
这个错误是由于编译器无法找到OpenCV的imread函数引起的。它可能是由于以下几个原引起的:
1. 缺少OpenCV:请确保已正确安装并配置了OpenCV库,并在编译时链接到正确的库文件。
2. 编译器无法找到OpenCV的头文件:请确保在代码中包含了正确的OpenCV头文件。例如,在使用imread函数之前,需要包含`#include <opencv2/opencv.hpp>`。
3. 编译器无法找到OpenCV库文件:请确保编译器能够找到OpenCV库文件的路径。你可以通过设置编译器的库路径或将库文件复制到默认搜索路径中来解决此问题。
如果你已经正确安装和配置了OpenCV,但仍然遇到这个错误,请检查你的编译环境和设置,确保正确链接和包含OpenCV相关的文件和库。
阅读全文