美文网首页
openCV3+VS2017学习笔记(三)

openCV3+VS2017学习笔记(三)

作者: whisper330 | 来源:发表于2018-11-29 20:34 被阅读0次

    示例2-10   打开笔记本摄像头并显示(在源码上做了一些修改)(P32)

    #include "pch.h"

    #include "opencv2/opencv.hpp"

    #include "opencv2/highgui/highgui.hpp"

    #include "opencv2/imgproc/imgproc.hpp"

    using namespace cv;

    int main() {

    namedWindow("1", WINDOW_AUTOSIZE);

    VideoCapture cap;

    cap.open(0);/*跟前面打开视频文件一样,视频文件这里写的是文件地址,摄像头写的是摄像头编号

    (如果只有一个摄像机连接,这个编号通常为0)*/

    if (!cap.isOpened())//检验是否打开,没打开,则报错

    {

    std::cerr << "could not open capture." << std::endl;

    return -1;

    }

    else

    {

    Mat frame;

    while(1)

    {

    cap>> frame;

    imshow("1", frame);

    waitKey(30);

    }

    }

    return 0;

    }

    代码中用到  return -1 和 return 0,便想提及一下该用法说明。

    return语句用来结束循环,或返回一个函数的值。

    1 return, 如果什么都不接的话,其实就是void类型函数的返回,返回后不再执行return后面的语句

    如果函数执行成功返回0,不成功返回非0,一般情况下非0值常用-1来表示。

    2 return 0:一般用在主函数结束时,表示程序正常终止,即告诉系统程序正常。

    3 return -1::表示返回一个代数值,一般用在子函数结尾。表示程序异常终止,即告诉系统程序异常

    4 return 1:与return -1相同。

    ---------------------

    原文来源:https://blog.csdn.net/it_job/article/details/79132940


    示例2-11 读取视频并将其转化为对数极坐标[1]视频显示并存储。

    #include "pch.h"

    #include "opencv2/opencv.hpp"

    #include <iostream>

    using namespace cv;

    int main() {

    namedWindow("1", WINDOW_AUTOSIZE);

    namedWindow("2", WINDOW_AUTOSIZE);

    VideoCapture cap("F:/test.avi");

    double fps = cap.get(CAP_PROP_FPS);

    Size size((int)cap.get(CAP_PROP_FRAME_WIDTH), (int)cap.get(CAP_PROP_FRAME_HEIGHT));

    VideoWriter writer;

    writer.open("F:/new.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, size);//参数说明(路径名称,编码方式(下面有详细说明[2]),帧率,大小)

    cv::Mat logpolar_frame, rgb_frame;

    for (;;) {

    cap >> rgb_frame;

    if (rgb_frame.empty()) break;

    imshow("1", rgb_frame);

    /*对数极坐标变换,参数说明(原图,新图,变换中心(这个在跟踪里要求很高),比例因子(设置原则是便于最感兴趣的特征能够存在于图像的大部分区域),参数插入方式)*/

    logPolar(rgb_frame, logpolar_frame, Point2f(rgb_frame.cols*0.5f, rgb_frame.rows*0.5f), 30, INTER_LINEAR | WARP_FILL_OUTLIERS);

    imshow("2", logpolar_frame);

    writer << logpolar_frame;//写入文件

    char c = waitKey(10);

    if (c == 27) break;

    }

    cap.release();

    }

    [1]对数极坐标

           对数极坐标变换的灵感来源于人类视觉系统。图像旋转和尺度变化可以转化为对数极坐标中的平移和上下移动。可以应用在图像配准识别定位跟踪领域。注意,这种变化对图像的中心点要求严格。

    相关链接

    https://blog.csdn.net/carson2005/article/details/7185552 https://blog.csdn.net/zcg1942/article/details/80886999 https://blog.csdn.net/zcg1942/article/details/80936038                        http://www.docin.com/p-860354163.html(基于对数极坐标变换的图像匹配算法论文) 

    [2]编码方式

           VideoWriter的第二个参数是视频编码方式,指明视频将以何种方式进行压缩。现在有非常多的编码器可以选择(完整版见下面的链接),但是选择的任何编码器必须确保可以在你的机器上使用。

    https://blog.csdn.net/jellyli2091/article/details/62219678

    相关文章

      网友评论

          本文标题:openCV3+VS2017学习笔记(三)

          本文链接:https://www.haomeiwen.com/subject/wvcqcqtx.html