旋转视频opencv C ++

时间:2013-12-31 03:12:16

标签: c++ opencv

我尝试将相机中的视频旋转90度,我尝试使用cvTransposecvFlip,但结果是:

Unhandled exception at 0x752bc41f in CameraStero.exe: Microsoft C++ exception: cv::Exception at memory location 0x0021faf8..

这是我的代码。

#include <opencv\cv.h>
#include <opencv\highgui.h>

using namespace cv;



int main(int argc, char** argv)
{
 VideoCapture cap1;

 cap1.open(0);
 cap1.set(CV_CAP_PROP_FPS, 0.55); 
 cap1.set(CV_CAP_PROP_FRAME_WIDTH, 800.0); 
 cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 800.0); 


 Mat img1, img2;

for(;;){


CvCapture* cap;
IplImage* frame;
cap = cvCreateCameraCapture( 0 );
cvGrabFrame(cap);
frame=cvRetrieveFrame(cap);




cvTranspose(frame, frame);
cvFlip(frame, frame, 1);


cvShowImage("Img1", frame);

    if(waitKey(1)=='q')
            break;
  }
 }

任何纠正代码的建议?

2 个答案:

答案 0 :(得分:0)

您正在混合使用OpenCV c ++和c接口。这是如何在OpenCV / C中完成的。

#include <opencv\cv.h>
#include <opencv\highgui.h>

int main(int argc, char** argv)
{
    CvCapture* cap = cvCreateCameraCapture( 0 );

    for(;;)
    {
       IplImage* frame=cvQueryFrame(cap);

       cvTranspose(frame, frame);
       cvFlip(frame, frame, 1);

       cvShowImage("Img1", frame);

       if(waitKey(30)=='q')
           break;
   }

   cvReleaseCapture(cap);
 }

答案 1 :(得分:0)

  1. 您应该将捕获参数保留为默认值,因为如果相机不支持设置您的设置,则可能会导致错误。因此,请删除以下行:

    cap1.set(CV_CAP_PROP_FPS, 0.55); 
    cap1.set(CV_CAP_PROP_FRAME_WIDTH, 800.0); 
    cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 800.0); 
    

    或者如果您确实需要更改宽度和高度,则应确保要设置的宽度/高度应小于默认值。以下代码也可以使用:

    cap1.set(CV_CAP_PROP_FPS, 0.55); 
    cap1.set(CV_CAP_PROP_FRAME_WIDTH, 320); 
    cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 240); 
    
  2. 就像@SRF所说,你混合了OpenCV C / C ++接口,所以要么使用

    cap = cvCreateCameraCapture( 0 );
    

    cap1.open(0);
    

    ,但不是两者。

  3. 如果要在一个窗口中显示捕获的图像,则应首先通过以下方式创建窗口:

    cv::namedWindow("Img1", 1);
    
  4. 请勿忘记return 0;中的int main()。虽然某些编译器不限制此操作,但您应该一如既往地执行此操作。


  5. 修复所有这些后,代码应如下所示(在我的电脑上正常工作):

    int main()
    {
        VideoCapture cap1;
    
        cap1.open(0);
        cap1.set(CV_CAP_PROP_FPS, 0.55); 
        cap1.set(CV_CAP_PROP_FRAME_WIDTH, 320); 
        cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 240); 
        cv::namedWindow("Img1", 1);
    
        Mat frame;
        for(;;)
        {
            Mat frame;
            cap1 >> frame;
    
            transpose(frame, frame);
            flip(frame, frame, 1);
    
            imshow("Img1", frame);
    
            if(waitKey(1)=='q')
                break;
        }
    
        cap1.release();
        return 0;
    }