C++ 为Visual Studio中的图像创建文件夹,并;“向量迭代器不可解引用”;OpenCV 3.0

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&

我正在使用Visual Studio 2010和OpenCV 3.0

下面的代码尝试提取一系列图像的面片,以获得一些相同尺寸的斑点

首先,我尝试创建一个文件夹来保存不同的图像,但我无法:

字符串folderCreateCommand=“mkdir”+路径名patchbig; 系统(folderCreateCommand.c_str())

其次,在迭代器的预增量之后出现错误“调试断言失败”向量迭代器不可解引用,我不知道为什么

有什么想法吗

            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,我刚刚修改了代码,我认为现在它是正确的。