c++ - 旋转视频opencv C++

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

有什么纠正代码的建议吗?

最佳答案

  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++ 接口(interface),所以您要么使用

    cap = cvCreateCameraCapture( 0 );
    

    cap1.open(0);
    

    ,但不是两者。

  3. 当您想在一个窗口中显示您捕获的图像时,您应该首先通过以下方式创建窗口:

    cv::namedWindow("Img1", 1);
    
  4. 不要忘记在 int main()return 0;。尽管某些编译器不对此进行限制,但您应该一如既往地这样做。


修复所有这些后,代码应如下所示(在我的电脑上运行良好):

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

关于c++ - 旋转视频opencv C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20851177/

相关文章:

c++ - 学习如何使用 UML

c++ - 如何为 C++ 开发配置 Vim?

c++ - 检索对象的外轮廓

android - Android 2.1 可以使用 OpenCV 库吗?

c++ - 扩展单例模式以允许多个实例

c++ - 使用Qt creator,为什么我的类头不能编译?

python - 如何从任何给定大小的图像中仅获取可能的非重叠 block 并将其显示在Python中

macos - 从 Qt 创建者中构建时,qmake 找不到 opencv 包

c++ - OpenCV2.4 从视频中捕获帧可能存在的错误

c++ - 从 C++ 如何执行 C 中的方法或访问结构?