我是靠谱客的博主 俏皮镜子,最近开发中收集的这篇文章主要介绍RoboMaster视觉教程OpenCV(三)任务及参考RoboMaster视觉教程OpenCV(三)任务,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

RoboMaster视觉教程OpenCV(三)任务

文章目录

  • RoboMaster视觉教程OpenCV(三)任务
    • 代码解析
      • 图片保存间隔
      • 读取文件的次数
        • initImageWriter()
        • saveImages()
    • 微信公众号

#include <iostream>
#include "opencv2/opencv.hpp"
#include <fstream>
using namespace std;
using namespace cv;

void saveImage(const cv::Mat& frame);//函数以及对象如何声明
std::string initImageWriter(const std::string& filename_prefix);

void saveImages(const cv::Mat& frame) 
{
	auto save_image = initImageWriter("./image/");
	if (!frame.empty()) 
	{
		imwrite(save_image, frame);
	}
	else return;
}
std::string initImageWriter(const std::string& filename_prefix) 
{
	std::string save_image;
	std::ifstream in(filename_prefix + "cnt.txt");
	int cnt=0;
	if (in.is_open()) 
	{
		in >> cnt;
		in.close();
	}
	std::string file_name = filename_prefix + std::to_string(cnt) + ".png";
	cnt++;
	std::ofstream out(filename_prefix + "cnt.txt");
	if (out.is_open()) 
	{
		out << cnt << std::endl;
		out.close();
	}
	save_image = file_name;
	return save_image;
}
unsigned long int i= 0;
int main(int argc, char** argv)
{

	VideoCapture cap(0);
	if(!cap.isOpened())
	{
		cerr << "Can not open a camera or file." << endl;//cerr not cout
		return -1;
	}


	Mat frame;
	while(1)
	{
		cap >> frame;
		if(frame.empty())
		break;
		imshow("pictures", frame);
		if(i%20==0)//隔20帧保存一帧,足够了
		{
			saveImages(frame);
			
		}

		if(waitKey(30)>= 0)
		break;
	i++;
	}
		
	return 0;
}

代码解析

保存视频和保存图片大同小异

图片保存间隔

如何实现每隔一个固定的帧数保存一帧呢。这里我们需要一个整型变量i,i对于从摄像头读到的每一帧进行计数。那么如果每20帧,保存一帧的话,显然i的值为20、40、60、80……的时候。应该进行保存操作。所以也就意味着i%20 == 0;

i的值应该是什么类型呢呢?如果是每隔20帧进行保存的话,可以使用无符号整型。一旦间隔的帧数比较长,比如说20000帧的话,可以unsigned long int。当它们溢出后,又可以从零开始继续自加。

读取文件的次数

在这里特别注意一下保存视频和保存图片读取视频的次数是不一样的。程序执行一次,只需要保存一次视频,命名一次,所以只需要一次对文件的操作。而不断保存图片,在一次程序中需要命名多次,执行多次文件操作,所以获取路径的初始化函数也需要在每一次保存图片时执行。

initImageWriter()

函数读取文件中的整型,并返回一个已经设置好的路径名filename。

saveImages()

使用imwrite()保存图片。

这里将auto save_image = initImageWriter("./image/");这句话挪到了saveImages()里面。(12行)

微信公众号

欢迎大家关注我的个人公众号,现阶段主要总结Robomaster相关的计算机视觉知识。
公众号名称:三丰杂货铺
在这里插入图片描述

最后

以上就是俏皮镜子为你收集整理的RoboMaster视觉教程OpenCV(三)任务及参考RoboMaster视觉教程OpenCV(三)任务的全部内容,希望文章能够帮你解决RoboMaster视觉教程OpenCV(三)任务及参考RoboMaster视觉教程OpenCV(三)任务所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部