实时检测图像中的主要边缘 opencv for Android

简介: 背景:根据http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html和http://docs.opencv.org/modules/imgproc/doc/feature_detection.html#houghlinesp,实现了在Android的相机实时捕捉屏幕中,抽取当前画面中主要边缘的功能。
背景:
根据 http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.htmlhttp://docs.opencv.org/modules/imgproc/doc/feature_detection.html#houghlinesp,实现了在Android的相机实时捕捉屏幕中,抽取当前画面中主要边缘的功能。算法上先使用了Canny算法对图像进行边缘检测,再使用probalistic Hough transform抽取最主要的边缘。

源码下载:
https://db.tt/UbLvwORc 基于OpenCV for Android Library 2.4.6

APP介绍
打开app后,屏幕中会出现红色线条,表示当前图像中主要的边缘。



现在对核心函数onCameraFrame做些解释:
01 @Override
02 public Mat onCameraFrame(CvCameraViewFrame inputFrame{
03     mRgba = inputFrame.rgba();
04     mGray = inputFrame.gray();
05     Mat cannyMat = new Mat();
06     Imgproc.Canny(mGray, cannyMat, HYSTERESIS_THRESHOLD1, HYSTERESIS_THRESHOLD2, 3, false);
07     Imgproc.HoughLinesP(cannyMat, lines, 1, Math.PI/180, ACCUMULATOR_THRESHOLD, MINLINELENGTH, MAXLINEGAP);
08     
09     for (int x = 0x < lines.cols() && x < HOUGH_LINE_COUNTx++) {
10           double[] vec = lines.get(0, x);
11           if(vec!=null{
12               double x1 = vec[0], 
13                       y1 = vec[1],
14                       x2 = vec[2],
15                       y2 = vec[3];
16               Point start = new Point(x1, y1);
17               Point end = new Point(x2, y2);
18               Core.line(mRgba, start, end, new Scalar(255,0,0), 3);
19           }
20     }
21     
22     return mRgba;
23 }

第6行 Imgproc.Canny()函数中的参数解释:
mGray 待处理矩阵,即当前frame返回的gray型Mat。Canny算法接收的输入必须是gray型的Mat
cannyMat 结果矩阵
HYSTERESIS_THRESHOLD1: 低于该阈值的点将不算作边缘
HYSTERESIS_THRESHOLD2: 高于该阈值的点将算作边缘
若某个点A的值处于 HYSTERESIS_THRESHOLD1和 HYSTERESIS_THRESHOLD2之间,只有当点A连接着一个高于 HYSTERESIS_THRESHOLD2的点B的时候,点A才算作边缘。

第7行  Imgproc.HoughLinesP()函数中,后三个参数解释:
ACCUMULATOR_THRESHOLD: 一个设定的阈值,如果一条线超过了该阈值,说明该线为图中的主要边缘
MINLINELENGTH: 最小边缘长度
MAXLINEGAP: 在一条线中,两点的最大间隔。如果两点间的间隔超过了
MAXLINEGAP,这两点就必定无法在一条线上

第9行 HOUGH_LINE_COUNT表示需要画出的最大主要边缘数。
目录
相关文章
|
1月前
|
算法 计算机视觉
OpenCV(四十三):Shi-Tomas角点检测
OpenCV(四十三):Shi-Tomas角点检测
25 0
|
1月前
|
计算机视觉
OpenCV(三十八):二维码检测
OpenCV(三十八):二维码检测
47 0
|
1月前
|
编解码 计算机视觉
OpenCV(三十六):霍夫直线检测
OpenCV(三十六):霍夫直线检测
25 0
|
1月前
|
计算机视觉 索引
OpenCV(三十五):凸包检测
OpenCV(三十五):凸包检测
24 0
|
1月前
|
存储 资源调度 算法
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
|
1月前
|
存储 算法 计算机视觉
OpenCV(四十二):Harris角点检测
OpenCV(四十二):Harris角点检测
28 0
|
16天前
|
编解码 计算机视觉 Python
opencv 图像金字塔(python)
opencv 图像金字塔(python)
|
1月前
|
存储 计算机视觉 C++
Opencv(C++)学习系列---特征点检测和匹配
Opencv(C++)学习系列---特征点检测和匹配
|
1月前
|
存储 计算机视觉
OpenCV(三十九):积分图像
OpenCV(三十九):积分图像
18 0
|
1月前
|
计算机视觉 索引
OpenCV(三十二):轮廓检测
OpenCV(三十二):轮廓检测
20 0