我正在尝试将视频流的每一帧拆分为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);