2023/4/17:由于大创的关系,我把这个算法整合进新项目中,所以同时修复了代码中的一些问题,比如全局对象问题,当然挺多没改的(代码是大一写的,现在看看真的是屎。)
效果如图:

——————————————————分割线—————————————————
本项目是一个基于Opencv与C++的项目,主要实现了装甲板灯条的识别,并用矩形动态框选
本项目是我RM视觉初学者时,结合队友的项目基础,一点点磨出来的,算是一个优化版本。
PS:这个版本矩形框不会跳动,很稳定,我优化了很久,但视频帧率有点低
整个项目我在初学时都标注了详尽的注释,可谓花了很多功夫。希望能帮到各位有需要的人吧。
个人额外提醒:注意项目中的 功能4:斜矩形框选 ,那个是优化的精髓。我研究了很久,可能是我当时Opencv基础较差的原因,可以让矩形框选保持稳定。
项目配置:
采用Opecv4以上版本:
#include <iostream>
#include<vector>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui_c.h>
#include<imgproc/imgproc.hpp>
#include<core/core.hpp>
using namespace std;
using namespace cv;
class rec_recognition
{
public:
int match_num;
vector<RotatedRect>rect_match;
vector<Point3i>level_end;
Mat src;
Mat src_end, dst;
Mat GrayImg;
Mat BinBrightImg;
Mat BinGrayImg;
Mat final;
double max(double first, double secend);
double min(double first, double secend);
void pre_treatment();
void application();
int match();
private:
int index = 0, maxlevel = 0;
RotatedRect rect, leftrect, rightrect;
Rect rect_first;
Point2f currentCenter;
double area[2];
double height = (leftrect.size.height + rightrect.size.height) / 2;
};
int main(){
VideoCapture capture("/Users/nathanchen/Downloads/rec_recognition/rectangle.mp4"); //这里输入文件
rec_recognition apply;
while (1){
capture >> apply.src;
apply.pre_treatment();
apply.match();
if (apply.match_num == 1){ //如果match处匹配成功,那就返回1
apply.application();
//imshow("rec_recognition", apply.src_end);
imshow("rec_recognition1", apply.src);
}
apply.rect_match.clear();
apply.level_end.clear();
waitKey(1000 / capture.get(CAP_PROP_FPS)); //每隔多少秒读下一帧
}
return 0;
}
void rec_recognition::pre_treatment(){
//色彩通道处理
std::vector<Mat> channels;// 把一个3通道图像转换成3个单通道图像
split(src, channels);//分离色彩通道
//只留蓝色(可以修改成其他颜色)——————————————————————————————————————修改颜色
GrayImg = channels.at(0) - channels.at(2);
//阈值处理
threshold(GrayImg, BinBrightImg, 55, 255, THRESH_BINARY);
threshold(GrayImg, BinGrayImg, 25, 255, THRESH_BINARY);
//形态学操作(膨胀)
Mat element_d = getStructuringElement(MORPH_ELLIPSE, Size(2, 2));//形态学操作
dilate(BinBrightImg, BinBrightImg, element_d);//膨胀
//与操作(?????)
BinBrightImg &= BinGrayIm

本项目基于Opencv与C++实现装甲板灯条的稳定识别及动态框选,通过优化算法确保矩形框稳定,同时提供详细的注释帮助理解。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



