图片合成视频软件(二)软件自动选取时间节点

!在这里插入图片描述](https://img-blog.csdnimg.cn/20200708131134563.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25pbmdtZW5nc2h1eGlhd28=,size_16,color_FFFFFF,t_70)
读入ME txt

	while (file3.ReadString(strValue2))
		{
			vecResult2.push_back(strValue2);
		}
   file3.Close();
	for (int j = 0; j < vecResult2.size(); j++)
		{
			tempStr = CT2A(vecResult2.at(j).GetBuffer(0));//转string,使用string的rfind函数
			poos = tempStr.rfind(":");//最后一次出现冒号的索引
			time = vecResult2.at(j).Mid(poos - 5, 8);
			//MessageBox(time);
		/*	ME_time.push_back(time);*/
			s2 = CT2A(time.GetString());
			string::iterator it;
			for (it = s2.begin(); it != s2.end(); it++)//去掉截取的时间点的冒号
				if (*it == ':')
				 {
				 s2.erase(it);
				 it--;
				}
			cstrTest = CA2T(s2.c_str());
			tempNum = _ttoi(cstrTest);//时间化整
			ME_time.push_back(tempNum);//入栈
		}

读入HSI txt

	fileHyper.Open(HyperTxtPath, CFile::modeRead);
		while (fileHyper.ReadString(HyperStr))
		{
			vecHyper.push_back(HyperStr);
		}
		fileHyper.Close();
		for (int c = 0; c < vecHyper.size(); c++)
		{
			tempStr = CT2A(vecHyper.at(c).GetBuffer(0));//转string,使用string的rfind函数
			poos = tempStr.rfind(":");//最后一次出现冒号的索引
			time = vecHyper.at(c).Mid(poos - 5, 8);
			s2 = CT2A(time.GetString());
			string::iterator it;
			for (it = s2.begin(); it != s2.end(); it++)
				if (*it == ':') {
					s2.erase(it);
					it--;
				}
			cstrTest = CA2T(s2.c_str());
			tempNum = _ttoi(cstrTest);
			//MessageBox(cstrTest);
			//ME_time.push_back(time);
			ME_time.push_back(tempNum);
		}

把int型的容器从小到大排序

sort(ME_time.begin(), ME_time.end());

把时间合并之后进行筛选,删掉间隔小于4秒的

for (int jj = 0; jj < ME_time.size(); jj++)//把时间合并之后进行筛选,删掉间隔小于4秒的
		{
			if (jj < ME_time.size() - 1)
			{
				if (ME_time[jj + 1] - ME_time[jj] < 4)
				{
					tempNum = ME_time[jj + 1];

					//ME_time[jj + 1]
						//ME_time.pop_back(jj+1);
					ME_time.erase(ME_time.begin() + jj + 1);
					jj--;//重要
				}
			}
		}

读相机保存的txt

        fileCamera.Open(CameraTxtPath, CFile::modeRead);
		while (fileCamera.ReadString(CameraStr))
		{
			vecCamera.push_back(CameraStr);
		}
		fileCamera.Close();
		for (int j = 0; j < vecCamera.size(); j++)//取出CameraTest的时间化整
		{
			strCamera = CT2A(vecCamera.at(j).GetBuffer(0));//转string,使用string的rfind函数
			dCamera = strCamera.rfind(":");//最后一次出现冒号的索引
			tempCaamera = vecCamera.at(j).Mid(dCamera - 5, 8);		
			s2 = CT2A(tempCaamera.GetString());
			string::iterator it;
			for (it = s2.begin(); it != s2.end(); it++)
				if (*it == ':')
				 {
					s2.erase(it);
					it--;
				}
			cstrTest = CA2T(s2.c_str());
			// MessageBox(cstrTest);
			tempNum = _ttoi(cstrTest);
			vector<int>::iterator iter_c_Time;
			iter_c_Time = find(c_Time.begin(), c_Time.end(), tempNum);
			// if(c_Time.)
			if (iter_c_Time != c_Time.end())
			{
				
			}
			else //没找到
			{
				cCamera = strCamera.find(":");
				temp_Camera = vecCamera.at(j).Mid(0, cCamera);
				int timeNum = _ttoi(temp_Camera);
				c_Time.push_back(tempNum);
				c_Num.push_back(timeNum);
			}

二分法在vevtor容器(相机时间及图片索引)

	for (int ii = 0; ii < ME_time.size(); ii++)//二分法在vevtor容器(相机时间及图片索引)中
		{
			int start = 0, end = c_Time.size() - 1;
			while (start <= end)
			{
				int mid = (start + end) / 2;		
				if (ME_time[ii] < c_Time[mid])
				{
					end = mid - 1;
					//MessageBox(_T("ME_time[ii] < c_Time[mid]"));
				}
				else if (ME_time[ii] > c_Time[mid])
				{
					start = mid + 1;
					//MessageBox(_T("ME_time[ii] > c_Time[mid]"));
				}
				else
				{
					R_Time.push_back(ME_time[ii]);
					R_Index.push_back(c_Num[mid]);					
					break;//j结束while循环,进行下一次查找
				}
			}
		}

把找到的时间及索引存入txt

        file_Write.Open(WritePath, CFile::modeReadWrite);
         for (int i = 0; i < R_Index.size(); i++)
		{

			timeCut.push_back(R_Index[i] - 440);
			n1.Format(_T("%d"), i + 1);
			n2.Format(_T("%d"), R_Time[i]);
			n4 = n2.Mid(0, 2) + _T(":") + n2.Mid(2, 2) + _T(":") + n2.Mid(4, 2);
			n3.Format(_T("%d"), R_Index[i]);
			n5.Format(_T("%d"), R_Index[i] - 440);
			file_Write.SeekToEnd();
			file_Write.WriteString(n1 + _T("\t") + n4 + _T("\t") + n3 + _T("\t") + n5);
			file_Write.WriteString(_T("\n"));
		}
		file_Write.Close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值