robomaster机器视觉(c++/python:opencv):1.识别装甲板两边光条

测试操作平台:Ubuntu16.0.4
opencv版本:3.4.1
IDE:qtcreator(C++), pycharm(python)


识别装甲板

在比赛中,第一步便是识别敌我机器人,通过识别装甲板可以完成。类似这种。

在这里插入图片描述

通过装甲板两边的光条(颜色,以及其他特征),来确定装甲板的位置并标记(后面的步骤)。

我们首先只完成识别装甲板两边的光条,并 将两边的光条保留下来

hsv基础知识
  • 利用openCV中cvSplit函数的在选择图像IPL_DEPTH_32F类型时,H取值范围是0-360,S取值范围是0-1(0%-100%),V取值范围是0-1(0%-100%)。

  • 利用openCV中cvSplit函数的在选择图像IPL_DEPTH_8UC类型时,H取值范围是0-180,S取值范围是0-255,V取值范围是0-255。

我们使用的是第二种
其中:

  • h:120-180红色系
    60-120蓝色系
    0-60黄色绿色系
  • s:0-255
  • v:0-255

效果图:
在这里插入图片描述
源代码:(识别一张图片)

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <math.h>
using namespace std;
using namespace cv;



int main()
{
    cv::Mat src_img ;
    src_img = imread("/home/liuxin/桌面/opencv/buff.png");
    imshow("原始图",src_img);


    if(src_img.empty())
    {
        cout<<"open failed"<<endl;
        return -1;
    }

    int LowH =60;
    int LowS=120;
    int LowV =245;

    int HighH = 120;
    int HighS = 255;
    int HighV =255;


    Mat hsvimg;
    cvtColor(src_img,hsvimg,COLOR_BGR2HSV);

    vector<Mat> hsvsplit;

    split(hsvimg,hsvsplit);
    equalizeHist(hsvsplit[2],hsvsplit[2]);
    merge(hsvsplit,hsvimg);


    Mat thresholdimg;
    inRange(hsvimg,Scalar(LowH,LowS,LowV),Scalar(HighH,HighS,HighV),thresholdimg);

    imshow("二值化后的图片",thresholdimg);


    while(1)
      {
          int key=cvWaitKey(10);
      if (key==27)
      {
          break;
      }
      }
      return(0);
}

经过修改后,可以识别视频,源代码如下:

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <math.h>
using namespace std;
using namespace cv;



int main()
{
    VideoCapture capture("/home/liuxin/桌面/opencv/train2.mp4");

    while (capture.isOpened()) {
        Mat frame;
        capture>>frame;
        if(frame.empty())
            {
                cout<<"some thing is wrong"<<endl;
                break;
            }

        int LowH =60;
        int LowS=120;
        int LowV =245;

        int HighH = 120;
        int HighS = 255;
        int HighV =255;


        Mat hsvimg;
        cvtColor(frame,hsvimg,COLOR_BGR2HSV);

        vector<Mat> hsvsplit;

        split(hsvimg,hsvsplit);
        equalizeHist(hsvsplit[2],hsvsplit[2]);
        merge(hsvsplit,hsvimg);


        Mat thresholdimg;
        inRange(hsvimg,Scalar(LowH,LowS,LowV),Scalar(HighH,HighS,HighV),thresholdimg);

        imshow("二值化后的图片",thresholdimg);


        int key=cvWaitKey(10);
        if (key==27)
        {
         break;
        }

    }
return 0;

}

在这里插入图片描述


下一节:将根据识别后的光条来去画矩形框,锁定击打区域

https://blog.csdn.net/weixin_42755384/article/details/88537705

  • 20
    点赞
  • 244
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
回答: RoboMaster装甲识别解算是指在RoboMaster比赛中,通过图像处理算法来识别和解算装甲的位置和角度。根据引用\[1\]中的描述,装甲识别解算的过程可以分为以下几个步骤:首先,通过机器视觉算法识别装甲的位置,可以以当前识别到的装甲为中心,扩大装甲的范围作为ROI区域,在下一帧图像识别时仅选取ROI区域进行处理,从而减少处理时间。其次,根据引用\[2\]中的描述,装甲近似竖直固定在小车的四周,具有一定的特征,如灯条平行、灯条长宽确定、两灯条间的间距确定等。通过颜色提取和特征匹配等方法,可以进一步识别装甲。最后,根据引用\[3\]中的描述,可以使用传统算法和OpenCV库来实现装甲识别解算。这些算法和代码可以参考东南大学2018年的开源代码和其他相关文章。总之,RoboMaster装甲识别解算是一个复杂的图像处理过程,通过多种算法和技术来实现对装甲的准确识别和解算。 #### 引用[.reference_title] - *1* *2* *3* [Robomaster基于传统算法的视觉识别教程](https://blog.csdn.net/weixin_45685193/article/details/123112639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值