簡體   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