std::vector<cv::Mat> image_temp,gif;报错:0612 11:17:02.008381 publisher.h:103] OpenCV(4.7.0) /app/source/opencv-4.7.0/modules/imgcodecs/src/loadsave.cpp:783: error: (-215:Assertion failed) !_img.empty() in function 'imwrite'
时间: 2024-01-27 09:05:43 浏览: 104
这个错误与你之前提到的错误信息一样,也是 OpenCV 的 Assertion failed 错误,出现在 imwrite 函数中。这个错误提示中的 !_img.empty() 含义同样是指图像对象不能为空。根据你提供的信息,你的代码中定义了两个 std::vector,分别是 image_temp 和 gif,这两个向量内部存储了一些 cv::Mat 类型的图像对象。因此,你需要检查这两个向量中的每个图像对象是否为空,如果为空,就无法保存为文件,因此就会出现这个错误。你可以使用 cv::Mat 的 empty() 函数来检查图像是否为空。
相关问题
怎么打印std::vector<std::pair<cv::Mat, double>> barycenter_history;//cv::Point2f std::vector<std::pair<cv::Mat, double>> pose_history;//cv::Point3f
您可以使用`std::cout`打印这两个向量的元素。对于每个元素,您可以使用`first`和`second`成员访问`std::pair`对象中的`cv::Mat`和`double`,然后将它们打印出来。以下是一些示例代码:
```
// 打印 barycenter_history 中的元素
std::cout << "barycenter_history:" << std::endl;
for (const auto& item : barycenter_history) {
std::cout << item.first << ", " << item.second << std::endl;
}
// 打印 pose_history 中的元素
std::cout << "pose_history:" << std::endl;
for (const auto& item : pose_history) {
std::cout << item.first << ", " << item.second << std::endl;
}
```
请注意,为了打印`cv::Mat`,您需要使用`cv::Mat`的重载运算符`<<`。
error: no matching function for call to ‘drawMatches(cv::Mat&, std::vector<std::vector<cv::KeyPoint> >&, cv::Mat&, std::vector<std::vector<cv::KeyPoint> >&, std::vector<cv::DMatch>&, cv::Mat&)’
这个错误通常是因为 `cv::drawMatches` 函数的参数类型不匹配导致的。你需要检查以下几点:
1. 检查 `cv::drawMatches` 函数的参数类型是否正确,尤其是输入图像的类型是否正确(比如是 `CV_8UC1` 还是 `CV_8UC3`)。
2. 检查输入的关键点和匹配对是否正确。确保它们被正确地传递给了 `cv::drawMatches` 函数。
3. 检查 OpenCV 版本是否正确。有些版本的 OpenCV 可能不支持某些函数或参数。
如果以上方法都不起作用,你可以尝试在 OpenCV 官方文档中查找更多信息,或者尝试与 OpenCV 社区寻求帮助。
阅读全文
相关推荐

















