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