基于opencv的视觉巡线实现

前言

这段时间在和学弟打软件杯的比赛,有项任务就是机器人的视觉巡线,这虽然不是什么稀奇的事情,但是对于一开始不了解视觉的我来说可以说是很懵了,所以现在就想着和大家分享一下,来看看是如何基于opencv来实现巡线的。我这里以ubuntu20.04为例了

正文

1.查看相机设备

首先要完成视觉巡线那必不可少的就是相机了,使用

复制代码
ll /dev/video*

来查看相机。

这里可以看到我有两个相机设备,一个是我电脑自带的相机video0,另一个是我的usb相机video1。

2.显示实时图像

新建一个工作空间,然后新建一个cpp文件,然后进行相机的初始化,以及调用窗口实时显示图像

复制代码
#include <opencv2/opencv.hpp>
#include <iostream>
#include <chrono>

using namespace std;

int camera_width = 640;
int camera_height = 480;

int main(int argc, char const *argv[])
{
    // 初始化变量和对象
    cv::VideoCapture cap(1);
    cap.set(CAP_PROP_FRAME_WIDTH, camera_width);
    cap.set(CAP_PROP_FRAME_HEIGHT, camera_height);
    // 循环处理每一帧图像
    while (true) {
        cv::Mat color_image;
        cap.read(color_image);
        if (color_image.empty()) {
            cerr << "Failed to capture image" << endl;
            break;
        }
     imshow("Color Image", color_image);
     char key = waitKey(1);
        if (key == 'q') {
            break;
        }
    }

    // 释放资源
    cap.release();
    destroyAllWindows();
    return 0;
}

这里初始化cv::VideoCapture cap(1)传入的参数就是上面查看到的设备,如果想要调用系统自带相机,那就改为cap(0)。

3.巡线函数

我这里函数声明如下:

复制代码
tuple<cv::Mat, float, bool, bool, bool> followBlindPath(cv::Mat color_image) 

由于我想要多个返回值所以就采用了tuple模版,后面采用tie函数进行解包,其中输入参数为要识别的图片,输出参数分别为经识别后标记的图片,以及水平方向上偏差(后面会具体解释是什么偏差),后面三个布尔值表示三个状态,分别为巡线,转弯和停止。

在识别开始之前,由于图片在opencv保存的格式默认为BGR格式图片,我们要转为HSV格式,因为后面的操作都是基于HSV图片进行的。

复制代码
cv::cvtColor(color_image, hsvFrame, COLOR_BGR2HSV);

效果如下:

然后指定HSV的色域,scalar函数三个参数分别为色调(Hue)、饱和度(Saturation)和亮度(Value),我这里设置的值为黄色的色域。

复制代码
cv::Scalar color_lower =  cv::Scalar(10, 40, 120);
cv::Scalar color_upper =  cv::Scalar(40, 255, 255);
cv::inRange(hsvFrame, color_lower, color_upper,color_mask);

inRange函数用于判断一个像素或像素矩阵是否在指定的范围内,hsvFrame是输入图像,返回图像color_mask是一个二值图像,即在色域内的为白色,色域外为黑色。

处理效果如下:

点击基于opencv的视觉巡线实现 - 古月居可查看全文

相关推荐
GISer_Jing31 分钟前
SSE Conf大会分享——大模型驱动的智能 可视分析与故事叙述
前端·人工智能·信息可视化
Wai-Ngai34 分钟前
自动驾驶控制算法——模型预测控制(MPC)
人工智能·机器学习·自动驾驶
北京耐用通信35 分钟前
突破协议壁垒:耐达讯自动化Ethernet/IP转CC-Link网关在工业互联中的核心应用
人工智能·网络协议·安全·自动化·信息与通信
提娜米苏35 分钟前
[论文笔记] 基于 LSTM 的端到端视觉语音识别 (End-to-End Visual Speech Recognition with LSTMs)
论文阅读·深度学习·计算机视觉·lstm·语音识别·视觉语音识别
扫描电镜35 分钟前
扫描电镜选购指南:智能、稳定与自动化的综合考量
人工智能·自动化·扫描电镜·自动扫描电镜
AI人工智能+36 分钟前
炫彩活体检测技术:利用RGB色光序列检测用户面部生物特征反应,能有效识别3D面具、Deepfake等伪造攻击
人工智能·人脸识别·炫彩活体检测
无代码专家38 分钟前
数字化转型下的订单管理全流程优化方案
大数据·运维·人工智能
QianCenRealSim41 分钟前
FSD入华“加速”中国自动驾驶产业的推动与重构
人工智能·重构·自动驾驶
roman_日积跬步-终至千里43 分钟前
【模式识别与机器学习(1+)】基础概念之:机器学习基础
人工智能·机器学习
itwangyang52044 分钟前
AIDD-人工智能药物设计-StoL:像搭乐高一样用扩散模型构建大分子 3D 构象
人工智能·3d