• TEXT


    //类的初始化
    	QRCodeDetector QRCode;//opencv4二维码
    	MonocularRanging mono("../QR_test/cameraParams.xml");//单目测距类
    	ChooseTarget Chooser(20, 10);//选择目标
    	ChooseTarget::Target target;
    	BallisticCalculation Ballistic(5, 25000, 100, 9806);//弹道计算
    	mono.SetTargetSize(62, 62);
    	//图像获取
    	VideoCapture CAP;
    	CAP.open("/dev/video0", CAP_V4L2);
    	CAP.set(CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'));
    	CAP.set(CAP_PROP_FRAME_HEIGHT, 480);
    	CAP.set(CAP_PROP_FRAME_WIDTH, 640);
    	CAP.set(CAP_PROP_AUTO_WB, 1);//白平衡
    	//    CAP.set(CAP_PROP_AUTO_EXPOSURE, 0);
    	//    CAP.set(CAP_PROP_EXPOSURE, 121);
    	CAP.set(CAP_PROP_FPS, 120);
    
    	if (!CAP.isOpened())
    	{
    		cout << "cap error" << endl;
    		exit(0);
    	}
    	Mat Src;
    
    	vector<Point2f> Points;
    	SpatialLocation location;//6维空间坐标系类
    	Sphe_COORD Spherical;//SphericalCoordiantes 球量
    	Rect_COORD Trans;//SpaceRectangularCoordiantes 矩形空间量
    
    	double time1 = cv::getTickCount();//时间
    	int count = 0, _count = 0;
    
    	while (true)
    	{
    		CAP >> Src;
    		if (QRCode.detect(Src, Points))
    		{
    			line(Src, Points[0], Points[1], Scalar(0, 255, 0));
    			line(Src, Points[1], Points[2], Scalar(0, 255, 0));
    			line(Src, Points[2], Points[3], Scalar(0, 255, 0));
    			line(Src, Points[3], Points[0], Scalar(0, 255, 0));
    
    			mono.GetSpatialLocation(location, Points);//得到目标空间位置 6维空间坐标系类
    			Spherical = location;//球量<<6维空间坐标系类
    			Trans = Spherical;//矩形空间量<<球量
    
    			/*getTickCount():用于返回从操作系统启动到当前所经的计时周期数,看名字也很好理解,get Tick Count(s)。
    			getTickFrequency():用于返回CPU的频率。get Tick Frequency。这里的单位是秒,也就是一秒内重复的次数。
    			*/
    			//将目标压入链表
    			Chooser.PushTarget(ChooseTarget::Target(location, ((double)getTickCount() / getTickFrequency())));
    
    
    			//printf("X: %+3.02lf	Y: %+3.02lf	Z: %+3.02lf
    ", target.x, target.y, target.z);
    			Points.clear();
    
    			//            printf("X: %+3.02lf/%+3.02lf	Y: %+3.02lf/%+3.02lf	Z: %+3.02lf/%+3.02lf
    ",
    			//                   location.x, Trans.x,
    			//                   location.y, Trans.y,
    			//                   location.z, Trans.z);
    
    						//printf("phi: %+3.02lf theta: %+3.02lf r: %+3.02lf z: %+3.02lf
    ", Ran2Deg(Spherical.phi), Ran2Deg(Spherical.theta), Spherical.r, location.z);
    
    						//printf("P: %+3.02lf Y: %+3.02lf R: %+3.02lf
    ", location.Pitch, location.Yaw, location.Roll);
    
    			putText(Src, to_string(location.z), Points[0], FONT_HERSHEY_TRIPLEX, 1, Scalar(0, 0, 255), 1);
    		}
    
    
    		if (Chooser.GetTarget(target))//如果得到目标
    		{
    			double vx, vy, vz;//x轴,y轴,z轴的速度引用
    			target.GetSpeed(vx, vy, vz);//得到x,y,z速度
    			//printf("X: %+3.02lf/%+3.02lf	Y: %+3.02lf/%+3.02lf	Z: %+3.02lf/%+3.02lf
    ", target.x, vx, target.y, vy, target.z, vz);
    			Ballistic.GetAngle(target);//弹道的预测及计算
    		}
    
    		putText(Src, "FPS:" + to_string(_count), Point(0, 25), FONT_HERSHEY_TRIPLEX, 1, Scalar(0, 0, 255), 1);
    		imshow("Src", Src);
    		waitKey(1);
    
    		//计算FPS
    		count++;
    		if ((cv::getTickCount() - time1) / cv::getTickFrequency() >= 1)
    		{
    			time1 = cv::getTickCount();
    			_count = count;
    			count = 0;
    		}
    	}
    	return 0;
    
  • 相关阅读:
    Windows安装nginx服务
    高血压食谱 芹菜苦瓜可以降压吗
    非IT,零经验,零基础怎么备考信息系统项目管理师/高项考试?
    为什么要用urlencode()函数进行url编码
    Redis哨兵机制
    Qt 自定义QToolButton 自己互斥同时工具按钮之间实现互斥
    QItemSelectionModel获取QModelIndexList程序崩溃
    Qt QListView scrollTo定位指定项 和 LayoutMode布局的简单用法
    Sublime Text3 离线安装中文插件
    VSCODE导出PDF的数学公式
  • 原文地址:https://www.cnblogs.com/xingkongcanghai/p/12315822.html
Copyright © 2020-2023  润新知