将帧拆分为网格并再次组合,程序立即关闭(C ++,OpenCV 2.4.11)

时间:2017-03-11 16:46:11

标签: c++ opencv

我正在尝试将视频流的每一帧拆分为10x10网格,我已经完成了。在我完成一些操作后,我将它们拼接在一起,这一切似乎都在起作用。我的问题是,程序不会保持打开,我看到一个框架,然后终止。

如果我使用waitKey(0)然后我得到1帧冻结在屏幕上,但我想要一个恒定的流。任何帮助将非常感谢被困在这一天超过一天。

#include <cv.h>
#include <highgui.h>
#include <opencv2/imgproc/imgproc_c.h>
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{

 namedWindow( "Grid", cv::WINDOW_AUTOSIZE );
    VideoCapture cap;
    if (argc==1) {
        cap.open(-1);
    } else {
        cap.open(argv[1]);
    }
    if( !cap.isOpened() ) {
        std::cerr << "Couldn't open capture." << std::endl;
        return -1;
    }
    std::cout << "Width: " << cap.get(CV_CAP_PROP_FRAME_WIDTH) << std::endl;
    Mat frame, img_gry, img_gry_color;
    int a = 0;
    Mat imagesmall[100];
    vector<Mat> img_gry_vec;
    cv::Size sb_size(64,48);
    for(;;) {
        cap >> frame;
        if ( frame.empty()) {

            break;
        }
          for  ( int y = 0; y < 480; y += sb_size.height )

          {
            for  ( int  x= 0 ; x < 640; x += sb_size.width )
            {
                imagesmall[a] = Mat(frame, Rect(x,y,(sb_size.width), (sb_size.height))).clone();
                img_gry_vec.push_back(imagesmall[a]);
                a++;
            }
          }
        cv::Mat combined(480,640, img_gry_vec[0].type());
        a = 0;
          for  ( int y = 0; y < 480; y += sb_size.height )
          {
            for  ( int  x= 0 ; x < 640; x += sb_size.width )
            {
                  cv::Mat roi = combined(cv::Rect(x,y,sb_size.width,sb_size.height));
                  img_gry_vec[a].copyTo(roi);
                  a++;
            }
          }
        cv::imshow("combined" , combined);

        img_gry_vec.clear();
        if ( cv::waitKey(33) >= 0)
                        break;


    }

    return 0;

}

编辑:我已将其缩小到与

相关的范围
 cv::Mat combined(480,640, img_gry_vec[0].type());
    a = 0;
      for  ( int y = 0; y < 480; y += sb_size.height )
      {
        for  ( int  x= 0 ; x < 640; x += sb_size.width )
        {
              cv::Mat roi = combined(cv::Rect(x,y,sb_size.width,sb_size.height));
              img_gry_vec[a].copyTo(roi);
              a++;
        }
      }
    cv::imshow("combined" , combined);

0 个答案:

没有答案