当我尝试编译这段代码时,我收到了这个错误 -
错误:没有匹配函数来调用' glob(std :: __ cxx11 :: string&,std :: vector>&,bool)' glob(文件夹,文件名,false); ^
这是我使用的代码:
#include <vector>
#include <glob.h>
string folder = "/home/ragesh/C++ /calibration_laptop/images/*.jpg";
vector <string> filename;
glob(folder, filename, false);
if(count < filename.size())
{
img = imread(filename[count]);
if(img.empty())
{
cout << "\nimage loading failed.....!"<<"\n";
return 0;
}
imshow("image", img);
cvtColor ( img,gray, COLOR_BGR2GRAY );// gray scale the source image
vector<Point2f> corners; //this will be filled by the detected corners
bool patternfound = findChessboardCorners(gray, boardSize, corners, CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE + CALIB_CB_FAST_CHECK);
count ++;
}
答案 0 :(得分:2)
函数cv::glob
具有以下签名:
void cv::glob(cv::String pattern, std::vector<cv::String>& result, bool recursive = false)
由于pattern
是按值传递的,而cv::String
可以是constructed from a std::string
,因此第一个参数不是问题。
cv::String
然而,第二个 - result
- 是,因为它被视为非const引用。要解决您的问题,您需要filename
一个std::vector<cv::String>
。由于它代表了文件名的集合,我还建议使用复数来命名它:filenames
。
示例代码:
#include <opencv2/opencv.hpp>
#include <string>
#include <vector>
int main()
{
std::string folder("/home/ragesh/C++ /calibration_laptop/images/*.jpg");
std::vector<cv::String> filenames;
cv::glob(folder, filenames, false);
// Do something with filenames...
return 0;
}
<强>更新强>
我从签名和你问题上的标签得出结论,你是在OpenCV之后glob
(不完整的代码示例使得这有点困难)。但请注意,您添加的标题是Posix glob
函数。
很有可能是造成问题的另一个原因。
为了完整起见,让我列出我在代码示例中找到的其他问题:
std::
或cv::
- avoid using namespace
at top level)main()
答案 1 :(得分:1)
尝试使用CV::String
代替std::string
。
添加#include "cvstd.hpp"
,然后
cv::String new_folder_string(folder).
std::vector<cv::String> new_filename_vector.
glob(new_folder_string, new_filename_vector, false);
一些信息here(glob函数),here(OpenCV中的String类),here(使用带cv :: String的glob的示例)和here (berak的建议)。
编辑:我忘了提及您还需要将filename
从std::string
切换为cv::String
。