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

C++ 将帧拆分为网格并再次合并,程序立即关闭(C+;+;,OpenCV 2.4.11),c++,opencv,C++,Opencv,我试图将视频流的每一帧分割成一个10x10的网格,我已经这样做了。在我做了一些手术之后,我把它们缝合在一起,这一切似乎都起作用了。我的问题是程序根本不会保持打开状态,我看到一帧,然后它就终止了 如果我使用waitKey(0),那么我会在屏幕上冻结1帧,但我想要一个恒定的流。任何帮助都会非常感激,因为我已经在这上面坚持了一天多了 #include <cv.h> #include <highgui.h> #include <opencv2/imgproc/imgproc

我试图将视频流的每一帧分割成一个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;
使用名称空间std;
int main(int argc,字符**argv)
{
namedWindow(“网格”,cv::WINDOW\u AUTOSIZE);
视频捕捉帽;
如果(argc==1){
上限开放(-1);
}否则{
开帽(argv[1]);
}
如果(!cap.isOpened()){

std::cerr“int key=waitKey(33);cout=0)break;”key的值是多少?key的值是-1try
if(waitKey(33))break;
如果不起作用,请尝试
if(waitKey(33)='q')break;
。在后一种情况下,强制用户按
q
退出。
 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);