Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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+在图像的特定区域中查找轮廓+;?_C++_Opencv_Image Processing - Fatal编程技术网

C++ 如何使用opencv和C+在图像的特定区域中查找轮廓+;?

C++ 如何使用opencv和C+在图像的特定区域中查找轮廓+;?,c++,opencv,image-processing,C++,Opencv,Image Processing,我是opencv的新手。我试图检测特定图像中的车辆,如尺寸(300400)约为x=0至139和y=0至300的图像 那么,我应该使用什么条件来检测特定区域内的车辆,并在车辆通过进入车架后计数车辆 enter code herevoid processVideo(char* videoFilename) { //create the capture object `VideoCapture capture(videoFilename); if(!capture.isOpened()){ /

我是opencv的新手。我试图检测特定图像中的车辆,如尺寸(300400)约为x=0至139和y=0至300的图像

那么,我应该使用什么条件来检测特定区域内的车辆,并在车辆通过进入车架后计数车辆

enter code herevoid processVideo(char* videoFilename) {
//create the capture object
`VideoCapture capture(videoFilename);
if(!capture.isOpened()){
    //error in opening the video input
    cerr << "Unable to open video file: " << videoFilename << endl;
    exit(EXIT_FAILURE);
}
//read input data. ESC or 'q' for quitting
while( (char)keyboard != 'q' && (char)keyboard != 27 ){
    //read the current frame
    if(!capture.read(frame)) {
        cerr << "Unable to read next frame." << endl;
        cerr << "Exiting..." << endl;
        exit(EXIT_FAILURE);
    }
    //update the background model
    pMOG2->apply(frame, fgMaskMOG2);
    Mat im_th, src_gray;
    cvtColor( frame, src_gray, COLOR_BGR2GRAY );
    medianBlur( fgMaskMOG2, fgMaskMOG2, 15 );
    threshold( fgMaskMOG2, im_th,230 , 255, THRESH_BINARY_INV);

        Mat im_floodfill = im_th.clone();
       floodFill(im_floodfill, cv::Point(0,0), Scalar(255));

       Mat im_floodfill_inv;
       bitwise_not(im_floodfill, im_floodfill_inv);
       fgMaskMOG2= im_floodfill_inv;

       dilate(fgMaskMOG2, fgMaskMOG2,Mat ());
       erode(fgMaskMOG2, fgMaskMOG2,Mat ());
       medianBlur( fgMaskMOG2, fgMaskMOG2, 15 );
       //adaptiveThreshold(fgMaskMOG2,fgMaskMOG2 ,255,ADAPTIVE_THRESH_GAUSSIAN_C,THRESH_BINARY,11,2);

               rectangle(frame, cv::Point(10, 2), cv::Point(100,20),
                         cv::Scalar(255,0,255), -1);

               stringstream ss;
               ss << capture.get(CAP_PROP_POS_FRAMES);
               string frameNumberString = ss.str();
               putText(frame, frameNumberString.c_str(), cv::Point(15, 15),
                       FONT_HERSHEY_SIMPLEX, 0.5 , cv::Scalar(0,0,0));
               //show the current frame and the fg masks
               imshow("Frame", frame);
               imshow("FG Mask MOG 2", fgMaskMOG2);

              vector<vector<Point> > contours;
               vector<Vec4i> hierarchy;

               findContours( fgMaskMOG2, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0,0) );

               Mat drawing = frame;

                   Rect bounding_rect;

                   vector<Rect> boundRect( contours.size() );
                   vector<vector<Point> > contours_poly( contours.size() );


                   Scalar color( 255,0,0);  // color of the contour in the
                   //Draw the contour and rectangle


                   for( int i = 0; i < s; i++ )
                       { //approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
                       approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
                         boundRect[i] = boundingRect( Mat(contours_poly[i]) );

                       }
);

                   for( int i = 0; i< s; i++ )
                       {
                       drawContours( frame, contours_poly, i, color, 1, 8, vector<Vec4i>(), 0, Point() );
                       rectangle( frame, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0 );
                       }
                   imshow( "Display window", frame);
               }

               keyboard = waitKey(39);
}
在此输入代码void processVideo(char*videoFilename){
//创建捕获对象
`视频捕获(视频文件名);
如果(!capture.isOpened()){
//打开视频输入时出错
cerr变化:

findContours( fgMaskMOG2, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, 
Point(0,0) );
致:


其中,
cv::Rect(x,y,width,height)
表示ROI

我还要提到的是,您可以调用
findContours(fgMaskMOG2(cv::Rect(x,y,width,height)),…
使用偏移量
点(x,y)
来获得具有原始图像坐标的轮廓。@Miki是的,您对了点(x,y),它正确地找到了x和y
findContours( fgMaskMOG2(cv::Rect(x,y,width,height)), contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, 
Point(0,0) );