C++ 为Visual Studio中的图像创建文件夹,并;“向量迭代器不可解引用”;OpenCV 3.0
我正在使用Visual Studio 2010和OpenCV 3.0 下面的代码尝试提取一系列图像的面片,以获得一些相同尺寸的斑点 首先,我尝试创建一个文件夹来保存不同的图像,但我无法: 字符串folderCreateCommand=“mkdir”+路径名patchbig; 系统(folderCreateCommand.c_str()) 其次,在迭代器的预增量之后出现错误“调试断言失败”向量迭代器不可解引用,我不知道为什么 有什么想法吗C++ 为Visual Studio中的图像创建文件夹,并;“向量迭代器不可解引用”;OpenCV 3.0,c++,visual-studio-2010,opencv3.0,C++,Visual Studio 2010,Opencv3.0,我正在使用Visual Studio 2010和OpenCV 3.0 下面的代码尝试提取一系列图像的面片,以获得一些相同尺寸的斑点 首先,我尝试创建一个文件夹来保存不同的图像,但我无法: 字符串folderCreateCommand=“mkdir”+路径名patchbig; 系统(folderCreateCommand.c_str()) 其次,在迭代器的预增量之后出现错误“调试断言失败”向量迭代器不可解引用,我不知道为什么 有什么想法吗 vector<vector&
vector<vector<Point > >::iterator itc=contours.begin();
while (itc!=contours.end()) {
if (itc->size() < cmin || itc->size() > cmax){
itc= contours.erase(itc);
}
else{
std::vector<cv::Point> pts = *itc;
cv::Mat pointsMatrix = cv::Mat(pts);
cv::Scalar color( 0, 255, 0 );
cv::Rect r0= cv::boundingRect(pointsMatrix);
cv::rectangle(result,r0,color,2);
int patch = 0;
string pathNamePatchBig = fileNameRootBig;
cv::Mat croppedImageBig = resampledImage(r0).clone();
if ((r0.width>=PatchWidth)&&(r0.height>=PatchHeight)/*&&((frameNumber == 22)||(frameNumber == 157)
||(frameNumber == 239))*/){
string fileNamePatchBig = pathNamePatchBig;
fileNamePatchBig.append(".jpg");
imwrite(fileNamePatchBig,croppedImageBig);
//Create the folder
string folderCreateCommand = "mkdir " + pathNamePatchBig;
system(folderCreateCommand.c_str());
int y = r0.y;
int initialX = r0.x;
int x = initialX;
int finalX = r0.x + r0.width;
int finalY = r0.y + r0.height;
r0.width = PatchWidth;
r0.height = PatchHeight;
bool cropping = true;
while ( (y + PatchHeight)<finalY){
string fileName = "";
fileName.append(pathNamePatchBig);
fileName.append("/");
fileName.append(fileNameRootSmall);
r0.x = x;
r0.y = y;
cv::Mat croppedImage = resampledImage(r0).clone();
stringstream ss2;
ss2 << patch;
string patchStr = ss2.str();
fileName.append("-");
fileName.append(patchStr);
fileName.append(".jpg");
stringstream ss3;
ss3<<fileName;
string fullPath = ss3.str();
ss3.str("");
bool exito = imwrite(fullPath.c_str(),croppedImage);
if(!exito){//if not success, break loop
cout << "ERROR: Cannot write the frame into the folder" << endl;
break;
}
x += shift;
if ((x + PatchWidth)>finalX){
y += shift;
x = initialX;
}
patch++;
}
}
++itc;
}
}
vector::iterator itc=contours.begin();
while(itc!=contours.end()){
如果(itc->size()size()>cmax){
itc=等高线。擦除(itc);
}
否则{
标准:向量pts=*itc;
cv::Mat pointsMatrix=cv::Mat(pts);
cv::标量颜色(0,255,0);
cv::Rect r0=cv::boundingRect(pointsMatrix);
cv::矩形(结果,r0,颜色,2);
int-patch=0;
string pathNamePatchBig=fileNameRootBig;
cv::Mat croppedImageBig=重新采样图像(r0).clone();
如果((r0.width>=PatchWidth)&&(r0.height>=PatchHeight)/*&((frameNumber==22)| |(frameNumber==157)
||(frameNumber==239))*/){
字符串fileNamePatchBig=pathNamePatchBig;
fileNamePatchBig.append(“.jpg”);
imwrite(fileNamePatchBig、crappedimagebig);
//创建文件夹
字符串folderCreateCommand=“mkdir”+路径名patchbig;
系统(folderCreateCommand.c_str());
int y=r0.y;
int initialX=r0.x;
int x=初始值x;
int finalX=r0.x+r0.width;
int finalY=r0.y+r0.height;
r0.width=补丁宽度;
r0.高度=修补高度;
布尔裁剪=真;
虽然((y+PatchHeight)请将代码缩小到重现问题所需的最小数量。请看如何在@Miki处执行Ok,我刚刚修改了代码,我认为现在它是正确的。