zoukankan      html  css  js  c++  java
  • OpenCV学习

      这个很简单,没什么好说的。。。这里给出学习手册:

      1.官方教程:https://docs.opencv.org

      2.这个是一些video相关的API参考:https://docs.opencv.org/trunk/dd/d9e/classcv_1_1VideoWriter.html

      3.一个简单的例子实现将图片集合成视频:https://docs.opencv.org/trunk/d5/d57/videowriter_basic_8cpp-example.html#a5

      谈一下一些小细节,其实官方文档中有提示,注意仔细看应该没问题:

        1.注意图像尺寸,要合成的每一张图片规格必须一致。

        2.注意图像RGB值,如果是jpg/png这样的,则默认打开3个通道(RGB),imread()中有一个省缺参数isColor默认为true,如果图片是灰度图像,应将isColor设置为false。参考:https://blog.csdn.net/yang_xian521/article/details/7440190(看评论)、https://docs.opencv.org/master/d5/d98/tutorial_mat_operations.html

        3.fps(Frames per Second)表示帧率,单位Hz,即每秒播放的帧数,一般25~30的帧率在视频看起来会很流畅,在游戏中60~75fps就非常流畅了,太高了并不好,显示屏刷新频率会跟不上而浪费GPU的处理能力,太低了游戏体验会很糟糕...

        4.opencv貌似只支持avi格式的视频。

    ———— ps:简单的封装了一下VideoWriter ————

      头文件:img2video.hpp:

    #ifndef _IMG_TO_VIDEO_H_
    #define _IMG_TO_VIDEO_H_
    
    #include "opencv2/imgcodecs.hpp"
    #include "opencv2/highgui.hpp"
    #include "opencv2/videoio.hpp"
    #include <stdio.h>
    #include <string.h>
    
    #ifndef __cplusplus
    extern "C" {
    #endif
    
    #ifndef __cplusplus
    }
    #endif // __cplusplus
    
    using namespace cv;
    
    #define BUF_SIZE (32 << 1)
    
    int ImageOverlay(char*src,
    	const char*format, const char*dst,
    	int width, int height,
    	size_t start_name, size_t end_name,
    	int fps, int isColor)
    {
    	char img_name[BUF_SIZE];
    	char psrc[BUF_SIZE];
    	strcpy(psrc, src);
    	Mat r;
    
    	VideoWriter writer(dst, VideoWriter::fourcc('M', 'J', 'P', 'G'), fps,
                            Size(width, height), isColor);
    	if (!writer.isOpened()) { printf("Error at line %d :function VideoWriter
    ", __LINE__); return -1; }
    	for (size_t i = start_name; i <= end_name; i++)
    	{
    #ifdef _WIN64
    		if (sprintf(img_name, "/%I64d.", i) < 0)
    #else
    		if (sprintf(img_name, "/%lld.", i) < 0)
    #endif
    		{
    			printf("Error at line %d :function sprintf()
    ", __LINE__);
    			return -3;
    		}
    
    		strcat(img_name, format);
    		strcat(src, img_name);
    		printf("%s
    ", src);
    		r = imread(src);
    		strcpy(src, psrc);
    		if(r.empty()) { printf("Error at line %d :function imread()
    ", __LINE__); return -4; }
    		waitKey(5);
    		writer.write(r);
    	}
    	printf("加载完成!
    ");
    	return 0;
    }
    
    #endif // _IMG_TO_VIDEO_H_

      测试:

    #include "img2video.hpp"
    #include <iostream>
    
    int main()
    {
    	char src[] = "/home/darkchii/图片";
    	char format[] = "png";
    	
    	ImageOverlay(src, format, "/home/darkchii/视频/sg0.avi", 1920, 1080, 2, 6, 6, 1);
    	return 0;
    }
    

      

  • 相关阅读:
    JAVA7/8中的HashMap和ConrrentMap
    Redis
    SpringBoot
    JAVA反射优化
    spring多模块项目手动整合
    spring事物与传播行为
    [pixhawk笔记]7-MAVLink添加自定义消息
    [pixhawk笔记]6-uORB流程及关键函数解析
    [pixhawk笔记]5-uORB消息传递
    [pixhawk笔记]4-如何写一个简单的应用程序
  • 原文地址:https://www.cnblogs.com/darkchii/p/9142472.html
Copyright © 2011-2022 走看看