#pragma once
#include <string>
#include <iostream>
#include <vector>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
//----------------------------------------------------------
// MAIN
//----------------------------------------------------------
int main(int argc, char* argv[])
{
// src image
Mat src;
//grayscale image
Mat gray;
// edges image
Mat edges;
//dst image
Mat dst;
//eroded image
Mat erosion;
//smoothed result
Mat result;
//----------------------------------------------------------
// Image loading
//----------------------------------------------------------
namedWindow("result");
namedWindow("src");
namedWindow("edges");
src = imread("C:/Users/HP/Desktop/SDP/obstacle detection/obstacle detection/obstacle detection/shapes.jpg");
//----------------------------------------------------------
//Specifying size and type of image
//----------------------------------------------------------
edges = Mat::zeros(src.size(), CV_8UC1);
dst = Mat::zeros(src.size(), CV_8UC1);
gray= Mat::zeros(src.size(), CV_8UC1);
erosion = Mat::zeros(src.size(), CV_8UC1);
result = Mat::zeros(src.size(), CV_8UC1);
//----------------------------------------------------------
//Converting from RGB to grayscale
//----------------------------------------------------------
cvtColor(src, gray, COLOR_BGR2GRAY);
//----------------------------------------------------------
//Edge Detetcion using OpenCV Canny Edge Detector function
//----------------------------------------------------------
Canny(gray, edges, 80, 255);
//----------------------------------------------------------
//Filling in the non-obstacle areas with white
//----------------------------------------------------------
for (int i = 0; i<edges.cols; ++i)
{
int j = edges.rows - 1;
for (j = edges.rows - 1; j>0; --j)
{
if (edges.at<uchar>(j, i)>0)
{
break;
}
}
dst(Range(j, dst.rows - 1), Range(i, i + 1)) = 255;
}
//----------------------------------------------------------
// Appying erosion function to remove noise
//----------------------------------------------------------
Mat element = getStructuringElement(MORPH_RECT, Size(10, 10));
erode(dst,erosion,element);
//----------------------------------------------------------
//Smoothing the edges to get result
//----------------------------------------------------------
GaussianBlur(erosion, result, Size(5,5), 4);
//----------------------------------------------------------
// Displaying the intermediate and final resulting images
//----------------------------------------------------------
namedWindow("src", WINDOW_NORMAL);
imshow("src", src);
namedWindow("edges", WINDOW_NORMAL);
imshow("edges", edges);
namedWindow("dst", WINDOW_NORMAL);
imshow("dst", dst);
namedWindow("erosion", WINDOW_NORMAL);
imshow("erosion", erosion);
namedWindow("result", WINDOW_NORMAL);
imshow("result", result);
//----------------------------------------------------------
// Wait key press
//----------------------------------------------------------
waitKey(0);
destroyAllWindows();
return 0;
}
代码接收图像,将其转换为灰度。然后使用精明的边缘检测来检测图像中所有物体的边缘。边缘检测图像从底部开始填充白色,直到检测到边缘。这个过程一直持续到整个图像被覆盖。结果是一个二进制图像,对于没有障碍物的区域,白色为白色,对于障碍物,黑色为黑色。然后使用opencv函数侵蚀来去除不必要的噪声。
如果我能得到关于如何改进或使用其他技术的建议,我将不胜感激。
我建议为图像设定一个与地面匹配的颜色范围的阈值。如果你的地面的颜色没有太大变化(在你的src图像中就是这种情况),这种方法效果很好。你可能想看看这个OpenCV例子(Python)。
引子 这篇教程旨在帮助开发者快速上手 Rax iOS 上的无障碍开发。 无障碍,即「accessibility」(常常缩写成「a11y」),是相对有障碍访问而言的,常见的有障碍访问场景有两类。 一种是用户因为生理缺陷,没有能力按正常的交互方式访问,举几个例子: 视障人士看不见或看不清,无法感受手淘上的信息,动效,氛围; 听障人士听不见或听不清,无法听到音乐以及视频的语音部分; 老年人视力和听力的退
无障碍性(a11y) 当你设计一款扩展,需要让扩展对于诸如视觉缺陷,失聪,行动不便的残疾人没有使用障碍。 所有人 — 不仅仅是有特殊需求的人 — 都应该能从那些无障碍扩展所提供的相应模式中获益。例如,键盘的快捷键对于盲人,灵敏度较差的那些人非常重要,然而他们也能提高高级用户在无鼠标状态下的工作效率。 字幕和手抄本提供了聋人获取影音内容的通道,然而他们对语言学习者也非常有用。 人们可以通过各种方式和
Statcounter. September 2016
主要内容:摄像机弹簧臂组件在这一节中,我们需要添加两个组件分别是摄像机弹簧臂组件和摄像机组件。 摄像机弹簧臂组件 摄像机弹簧臂组件,可以想象成是我们的手臂和手。手拿着摄像机,当我们想移动摄像机的时候,我们移动的是我们的手臂而不是摄像机。 1) 打开VS编辑器,在PlayingCharacter.h文件添加摄像机弹簧组件和摄像机组件。 2) 在CPP文件中,添加两个头文件和在构造函数中注册这两个组件。 3) 由于我们的骨骼模
Highmaps 支持多种不同方式的地图交互操作,包括缩放、平移、缩放到指定的区域等,所有相关的属性都可以在地图导航器( mapNavigation )中找到。 需要注意的是地图导航器默认是关闭的,这是因为地图导航器可能会影响到网页的导航操作。当用户在地图上滚动鼠标滚轮时,用户可能是需要操作网页的滚动,而当开启了地图导航器,Highmaps 会捕获鼠标滚轮事件,并响应成地图的缩放操作;同样的情况也