通过项目学opencv
参考网址
简介
实际上是通过ros的一个巡线项目简单学习ros+c++中opencv的使用.
lesson1[调用视频数据cv_bridge]
参考网址:
(109条消息) ROS学习笔记–cv_bridge_喵喵三三的博客-CSDN博客_cv_bridge
cv_bridge/Tutorials/UsingCvBridgeToConvertBetweenROSImagesAndOpenCVImages - ROS Wiki
实例:
src/line_follower_turtlebot/src/linedetect.cpp中
1 | void LineDetect::imageCallback(const sensor_msgs::ImageConstPtr& msg) { |
CvBridge提供几种用于转换为CvImage的函数
1 | // Case 1: 用于ros订阅复制使用 |
完整简单实例
1 | #include <ros/ros.h> |
lesson2[对读取数据进行初步处理]
参考网址:
(109条消息) OpenCV-高斯滤波cv::GaussianBlur_翟天保的博客-CSDN博客
高斯滤波处理
1 | void GaussianBlur( InputArray src, OutputArray dst, Size ksize, |
- InputArray类型的src,输入图像,如Mat类型。
- OutputArray类型的dst,输出图像。
- Size类型的ksize,高斯内核的大小。
- double类型的sigmaX,高斯核函数在X方向的标准偏差。
- double类型的sigmaY,高斯核函数在Y方向的标准偏差。
- int类型的borderType,推断图像边缘像素的边界模式。
实例
1 | cv::Mat LineDetect::Gauss(cv::Mat input) { |
lesson3[实现巡线检测]
步骤
- 转换颜色空间为hsv
- 检测判断黄色,并找出路线轮廓
- 计算轮廓的垂直边界最小矩形,矩形是与图像上下边界平行的,并画出矩形
- 找出图像质心
- 判断质心在图像中间的左侧还是右侧,由此控制车体运动
参考网址
(109条消息) 【OpenCV3】颜色空间转换——cv::cvtColor()详解_guduruyu的专栏-CSDN博客_cv.cvtcolor
具体样例
1 | int LineDetect::colorthresh(cv::Mat input) { |
颜色空间转换
1 | void cv::cvtColor( |
程序样例
1 | // 颜色空间转换 输入,输出,映射吗 |
检测黄线
1 | // 函数原型(C++) |
程序样例
1 | cv::Mat img_hsv; |
找出可视化轮廓
参考网址:
(109条消息) opencv cv.findContours 函数详解_Ibelievesunshine的博客-CSDN博客_cv.findcontours
两种调用方式:
1 | void cv::findContours( |
cv::RETR_EXTERNAL:表示只提取最外面的轮廓;
cv::RETR_LIST:表示提取所有轮廓并将其放入列表;
cv::RETR_CCOMP:表示提取所有轮廓并将组织成一个两层结构,其中顶层轮廓是外部轮廓,第二层轮廓是“洞”的轮廓;
cv::RETR_TREE:表示提取所有轮廓并组织成轮廓嵌套的完整层级结构。
程序样例:
1 | cv::findContours(LineDetect::img_mask, v, CV_RETR_LIST, CV_CHAIN_APPROX_NONE); |
计算轮廓的垂直边界最小矩形
1 | // 计算轮廓的垂直边界最小矩形,矩形是与图像上下边界平行的 |
找出质心
1 | cv::moments(LineDetect::img_mask); |
参考网址
(109条消息) opencv学习(四十三)之图像的矩moments()_烟雨博客-CSDN博客_cv::moments
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 某飞行员的随笔!