旋转视频OpenCV C++

旋转视频OpenCV C++,c++,opencv,C++,Opencv,我尝试将摄像机的视频旋转90度,我尝试使用cvTranspose和cvFlip,但结果是: 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 n

我尝试将摄像机的视频旋转90度,我尝试使用cvTranspose和cvFlip,但结果是:

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

有什么建议可以修改代码吗?

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

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); 
就像@SRF所说的,您混淆了OpenCV C/C++接口,所以您可以使用

cap = cvCreateCameraCapture( 0 );

,但不是两者都有

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

cv::namedWindow("Img1", 1);
不要忘记返回0;在int main中。虽然某些编译器不限制这一点,但您应该始终这样做

修复所有这些问题后,代码应该看起来像这样在我的电脑上运行良好:

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

谢谢你的帮助。这是可行的,但我需要设置帧宽度和高度,我尝试使用“cap1.setCV\u CAP\u PROP\u frame\u width,800.0;”同样适用于高度,但大小没有改变。@Limavolt更新了关于如何正确设置宽度/高度的答案。非常感谢您的帮助,我是opencv的新手
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;
}