我是靠谱客的博主 土豪雪糕,最近开发中收集的这篇文章主要介绍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
最后
以上就是土豪雪糕为你收集整理的robomaster机器视觉(c++/python:opencv):1.识别装甲板两边光条的全部内容,希望文章能够帮你解决robomaster机器视觉(c++/python:opencv):1.识别装甲板两边光条所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复