当前位置:网站首页>Obstacle detection
Obstacle detection
2022-07-06 00:54:00 【DDsoup】
Now for me, the most confused place is realsense SDK2.0 How do you use it? , How to combine the code with the image obtained by the camera .
Obstacle detection ideas
- Read image
- Binary processing of the image ( Use open or close operations ), Only detect the range of distance within one meter ( use realsense camera )
- Pass threshold size ( First set the threshold size ),Canny edge detection Obstacles detected , Draw the outline and calculate its convex hull ( I don't think it's reliable to use color as one of the judging elements , In case this object is colorful )
- Generate the final image
Reference code
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "RSWrapper.h"
#include "opencv2/imgproc/imgproc.hpp"
#include <librealsense/rs.hpp>
using namespace rs2;
using namespace std;
using namespace cv;
void mask_depth(Mat &image,Mat& th,int throld=1000)
{
int nr = image.rows; // The horizontal axis
int nc = image.cols; // The vertical axis
for (int i = 0; i<nr; i++)
{
for (int j = 0; j<nc; j++)
{
if (image.at<ushort>(i, j)>throld)
th.at<ushort>(i, j) = 0;
}
}
}
// Find obstacles
vector<vector<Point> > find_obstacle(Mat &depth, int thresh = 20, int max_thresh = 255, int area = 500)
{
Mat dep;
depth.copyTo(dep);
mask_depth(depth, dep, 1000);
dep.convertTo(dep, CV_8UC1, 1.0 / 16);
//imshow("color", color);
imshow("depth", dep);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));// The size of the core can be adjusted appropriately
Mat out;
// Carry out the opening operation
morphologyEx(dep, out, MORPH_OPEN, element);
//dilate(dhc, out, element);
imshow("opencv", out);
Mat src_copy = dep.clone();
Mat threshold_output;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
RNG rng(12345);
// Binarization of the image
threshold(dep, threshold_output, thresh, 255, CV_THRESH_BINARY);
// Contour discovery
findContours(threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
// Calculate the convex hull of each contour
vector<vector<Point> >hull(contours.size());
vector<vector<Point> > result;
for (int i = 0; i < contours.size(); i++)
{
convexHull(Mat(contours[i]), hull[i], false);
}
// Draw the outline and its convex hull
Mat drawing = Mat::zeros(threshold_output.size(), CV_8UC3);
for (int i = 0; i< contours.size(); i++)
{
if (contourArea(contours[i]) < area)// The area is less than area Convex hull of , Negligible
continue;
result.push_back(hull[i]);
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
drawContours(drawing, contours, i, color, 1, 8, vector<Vec4i>(), 0, Point());
drawContours(drawing, hull, i, color, 1, 8, vector<Vec4i>(), 0, Point());
}
imshow("contours", drawing);
return result;
}
int main(int argc, char* argv[])
{
Mat dhc;
Mat dep;
int idxImageRes = 1, idxFrameRate = 30;
RSWrapper depthCam(idxImageRes, idxImageRes, idxFrameRate, idxFrameRate);
while (true)
{
// obtain RGB Images
Mat color, depth;
bool ret = depthCam.capture(color, depth);
if (!ret)
{
cerr << "Get realsense camera data failure!" << std::endl;
break;
}
vector<vector<Point> > result;
result = find_obstacle(depth, 20, 255, 500);
if (cvWaitKey(1) == 27)
break;
}
depthCam.release();
}
边栏推荐
- View class diagram in idea
- Spark-SQL UDF函数
- Cloud guide DNS, knowledge popularization and classroom notes
- Convert binary search tree into cumulative tree (reverse middle order traversal)
- What is the most suitable book for programmers to engage in open source?
- Ubantu check cudnn and CUDA versions
- cf:H. Maximal AND【位运算练习 + k次操作 + 最大And】
- 小程序容器可以发挥的价值
- Opencv classic 100 questions
- Installation and use of esxi
猜你喜欢
ubantu 查看cudnn和cuda的版本
cf:D. Insert a Progression【关于数组中的插入 + 绝对值的性质 + 贪心一头一尾最值】
如何制作自己的机器人
Meta AI西雅图研究负责人Luke Zettlemoyer | 万亿参数后,大模型会持续增长吗?
The growth path of test / development programmers, the problem of thinking about the overall situation
KDD 2022 | EEG AI helps diagnose epilepsy
Model analysis of establishment time and holding time
《强化学习周刊》第52期:Depth-CUPRL、DistSPECTRL & Double Deep Q-Network
MySQL storage engine
Common API classes and exception systems
随机推荐
The growth path of test / development programmers, the problem of thinking about the overall situation
logstash清除sincedb_path上传记录,重传日志数据
Live video source code, realize local storage of search history
Five challenges of ads-npu chip architecture design
NLP generation model 2017: Why are those in transformer
Promise
Data analysis thinking analysis methods and business knowledge -- analysis methods (II)
Spark AQE
MIT doctoral thesis | robust and reliable intelligent system using neural symbol learning
Leetcode 44 Wildcard matching (2022.02.13)
从 1.5 开始搭建一个微服务框架——调用链追踪 traceId
Starting from 1.5, build a micro Service Framework - call chain tracking traceid
The third season of ape table school is about to launch, opening a new vision for developers under the wave of going to sea
Idea remotely submits spark tasks to the yarn cluster
95后CV工程师晒出工资单,狠补了这个,真香...
The value of applet containers
The population logic of the request to read product data on the sap Spartacus home page
The detailed page returns to the list and retains the original position of the scroll bar
Novice entry depth learning | 3-6: optimizer optimizers
Four commonly used techniques for anti aliasing