繁体   English   中英

旋转视频opencv C ++

[英]rotate video opencv C++

我试图将摄像机的视频旋转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;
  }
 }

有任何建议来更正代码吗?

您正在混合使用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. 您应该将捕获参数保留为默认值,因为如果相机不支持您的设置,可能会导致错误。 因此,删除以下几行:

     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() 尽管某些编译器没有对此进行限制,但是您应该像往常一样执行此操作。


修复所有这些问题后,代码应如下所示(在我的PC上运行正常):

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM