我是靠谱客的博主 土豪雪糕,这篇文章主要介绍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

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#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); }

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#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

最后

以上就是土豪雪糕最近收集整理的关于robomaster机器视觉(c++/python:opencv):1.识别装甲板两边光条的全部内容,更多相关robomaster机器视觉(c++/python:opencv):1内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部