Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Opencv断言失败_C++_Opencv_Image Processing - Fatal编程技术网

C++ Opencv断言失败

C++ Opencv断言失败,c++,opencv,image-processing,C++,Opencv,Image Processing,我试图从图像中只提取具有特定大小的轮廓 我是这样处理的 int offsetX ; int offsetY ; //here: read original image as 8UC3 cv::Mat original = cv::imread("0.png"); Mat imgx=original.clone(); cv::imshow("original", original); cvtColor(imgx,imgx,CV_BGR2GRAY); Mat

我试图从图像中只提取具有特定大小的轮廓

我是这样处理的

int offsetX ;
int offsetY ;
//here: read original image as 8UC3 
cv::Mat original = cv::imread("0.png");
Mat imgx=original.clone();
cv::imshow("original", original);
cvtColor(imgx,imgx,CV_BGR2GRAY);
Mat thresh;
vector<Vec4i> hierarchy;
RNG rng(12345);
vector < vector<Point> > contours; 
adaptiveThreshold(imgx, thresh, 255, 1, 1, 31, 2);
findContours(thresh, contours, CV_RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
Mat drawing = Mat::zeros(thresh.size(), CV_8UC3);
cout << "drawing "<<drawing.type()<<endl;
cv::Mat image = cv::Mat(original.rows, original.cols, original.type());
image.setTo(cv::Scalar::all(255));
for (size_t i = 0; i < contours.size(); i++)
{
    vector < Point > cnt = contours[i];
    if (contourArea(cnt) > 0)
    {
        Rect rec = boundingRect(cnt);
        if ((rec.height > 20 ) &&(3.5*rec.height>rec.width)&&  (rec.width>15)/*&& (rec.width<40)*/)
        {
            cout<<rec.x<<" "<<rec.y<<endl;
            offsetX=rec.x;
            offsetY=rec.y;
            Mat roi = original(rec);
            int width = roi.cols;
            int height = roi.rows;
            cout <<"h= "<<height<<" w= "<<width<<endl;
            cv::Rect characterLocation;
            if(height>35)
                characterLocation = cv::Rect(offsetX+3, offsetY, width, height);
            else
                characterLocation = cv::Rect(offsetX, offsetY, width, height);
            original(characterLocation).copyTo(image(characterLocation));
            imshow("jihedddd",roi); 
            imwrite("xxxxxx.png",roi);
            Mat stagedImage;
            Mat img;
            Scalar color = Scalar(255, 255, 255);
            drawContours(drawing, contours, i, color, 2, 8, hierarchy, 0, Point());
            imshow("Contours", drawing);
            waitKey();
            GaussianBlur(stagedImage, img, Size(5, 5), 2, 2);
            medianBlur(img, stagedImage, 3);
            Mat copy = original.clone();
            rectangle(copy, Point(rec.x, rec.y),
            Point(rec.x + rec.width, rec.y + rec.height),
            CV_RGB(0x00,0x00,0xff), 3);
            cv::imshow("char copied", image);
        }
    }
}
medianBlur(image,image,3);
cv::imshow("char copied", image);
cv::imwrite("characterC_result.tiff ", image);
cv::waitKey();
intoffsetx;
int-offsetY;
//此处:将原始图像读取为8UC3
cv::Mat original=cv::imread(“0.png”);
Mat imgx=original.clone();
简历::imshow(“原件”,原件);
CVT颜色(imgx、imgx、CV_bgr2灰色);
垫式脱粒机;
向量层次;
RNG RNG(12345);
矢量<矢量>等高线;
自适应阈值(imgx,thresh,255,1,1,31,2);
findContours(阈值、等高线、等高线、外部等高线、链近似线和简单线);
垫图纸=垫::零(thresh.size(),CV_8UC3);

cout 15)/*&(rec.width您必须小心:

characterLocation = cv::Rect(offsetX+3, offsetY, width, height);
如果width是imagewidth,则此处超出范围。您必须从width中减去x,或者将矩形裁剪到图像边框:

// get the Rect for the original image:
cv::Rect borders(Point(0,0), image.size());

// crop to the legal size:
characterLocation = cv::Rect(offsetX+3, offsetY, width, height) & borders;

你有没有仔细检查过错误的地方?我想这是错误的原处(characterLocation)。copyTo(image(characterLocation));但我仍然不知道它的原因。你必须调试代码,以找出导致此问题的确切代码行。没有这些信息,我们无法提供帮助。