网络摄像头流使用 OpenCV 3.0 + Visual Studio 2013 进行镜像

Posted

技术标签:

【中文标题】网络摄像头流使用 OpenCV 3.0 + Visual Studio 2013 进行镜像【英文标题】:Webcam Streaming is mirrored using OpenCV 3.0 + Visual Studio 2013 【发布时间】:2015-08-11 03:01:45 【问题描述】:

每次我编译这段代码时,网络摄像头流都会像我举起右手一样被镜像,它看起来好像是我的左手在屏幕上,经过几次重新编译后,出现了一条错误消息并且代码再也没有工作过。

错误: Camera.exe 中 0x00007FFB3C6DA1C8 处的未处理异常:Microsoft C++ 异常:内存位置 0x000000D18AD5F610 处的 cv::Exception。

除了中断进程,别无选择。

代码:

#include <opencv2/highgui/highgui.hpp>
#include <opencv\cv.h>

using namespace cv;


int main()

    Mat image;

    VideoCapture cap;

    cap.open(1);

    namedWindow("Window", 1);

    while (1)

        cap >> image;

        imshow("window", image);

        waitKey(33);

   



不知道是不是我刚开始学习opencv的代码有问题!

【问题讨论】:

【参考方案1】:
#include <opencv2/highgui/highgui.hpp>
#include <opencv\cv.h>

using namespace cv;


int main()

    Mat image;

    VideoCapture cap;

    cap.open(1);

    namedWindow("Window", 1);

    while (1)

        cap >> image;
        flip(image,image,1)
        imshow("window", image);

        waitKey(33);

   



只需水平翻转图像即可Find More Here

【讨论】:

它适用于实时流,但不适用于绘图字母或数字。在另一个代码中,流是固定的,但字母移动到屏幕左侧并镜像!! 然后你用翻转后的图像显示,原始图像处理。【参考方案2】:

当您的图像在垂直 (/x) 轴上镜像时没有任何问题(我猜在您的示例中您使用的是内置(笔记本电脑)网络摄像头)。

用于捕获和显示图像的(非常)简单的代码可能如下:

// imgcap in opencv3
#include "opencv2/highgui.hpp"
#include "opencv2/videoio.hpp"

int main() 

    cv::VideoCapture cap(0); // camera 0
    cv::Mat img;
    while(true) 
        cap >> img;
        cv::flip(img,img,1);
        cv::imshow("live view", img);
        cv::waitKey(1);
    
    return 0;

使用 OpenCV 3 时,您应该包含以下标题: #include &lt;opencv2/highgui.hpp&gt;

【讨论】:

我想你忘记了 while (1) 循环!

以上是关于网络摄像头流使用 OpenCV 3.0 + Visual Studio 2013 进行镜像的主要内容,如果未能解决你的问题,请参考以下文章

使用 openCV 和 wxPython 从网络摄像头获取流

OpenCV 显示和处理网络摄像头流

OPenCV 3.3.0 的网络摄像头启动问题

OpenCV 从网络摄像头流中分离出剪影

Qt OpenCV 网络摄像头流打开和关闭

c++ opencv获取编码的网络摄像头流