歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OpenCV直線檢測在C#、Android和iOS下的實現方法

OpenCV直線檢測在C#、Android和iOS下的實現方法

日期:2017/3/1 9:14:35   编辑:Linux編程

c#實現方法

LineSegment2D[][] lines = rgbRect.HoughLines(10, 150, 10, (Math.PI), 10, 0, 50);
for (int i = 0; i < lines[0].Length; i++)
{
      rgbImage.Draw(line[0][i], new Rgb(System.Drawing.Color.Red), 1);
}

c#下的實現方法很簡單,opencv的很多方法都被封裝在對象裡面,只要讓對象自己執行執行檢測就行,比如上面的rgbRect是個image<RGB,BYTE>類的對象,讓它自己執行霍夫直線檢測,其中第一第二個參數是canny的阈值,c++下實現直線檢測前要進行canny,在這裡直接設置就行,只需要調用一次。

找到的直線是一個二維數組,但是,數組裡面只有一行多列:[0][n],例如lines[0][0]是找到的第一條直線,其中lines[0][0].P1是第一條線的一個點的坐標,lines[0][0].P2是第一條線的第二個點的坐標

注意:opencv找到的直線不是按照坐標系的x軸從小到大存放的,而是找到的直線的先後順序,也就是存放在數組裡的第一條線的x軸能會比第二條線的x軸的坐標要大.

Android實現方法

Mat imageBuffer = new Mat(rgbImage.width(),rgbImage.height(),CvType.CV_8UC1);

Imgproc.Canny( rgbImage, imageBuffer,30, 150);
Mat lines = new Mat();
Mat rgbRect = imageBuffer.clone();
Imgproc.HoughLinesP(rgbRect, lines, 10, (Math.PI), 10, 0, 50);

double[] linePoints = new double[4];
for(int i = 0 ; i < lines.rows;i++){
    linePoints = lines.get(i, 0);
    Imgproc.line(rgbImage, new Point(linePoints[0],linePoints[1]), new Point(linePoints[2], linePoints[3]), new Scalar(255,0,0), 1);
}

Android的直線檢測是存放在一個CV_32SC4的Mat矩陣中,這個矩陣是N行1列的,行數代表找到的直線條數,每個通道按照x1、y1、x2、y2、存放直線的坐標,通過get(row,col)可以得到矩陣的每個點的數值,存放在一個double數組裡就可以得到直線位置。

android的直線檢測前要先進行canny ,但是並不能像c#和c++版那樣把canny的輸出對象設置為輸出對象,在c#和c++版下是可以的,所以必須得新建一個Mat存放canny後的圖像

ios實現方法

cv::canny(rgbRect,rgbRect,50,150);
std::vector<cv::Vec4i> lines;
cv::HoughLinesP(rgbRect, lines, 1, CV_PI, 10,10,50);
for( size_t i = 0; i < lines.size(); i++ )
{
  line( rgbImage, cv::Point(lines[i][0], lines[i][1]),
  cv::Point(lines[i][2], lines[i][3]), cv::Scalar(0,0,255), 1, 8 ); 
}

ios版其實是在c++下實現的,檢測到的直線是存放在一個std::vector的容器裡,每個元素裡存放4個浮點數,也是按照x1、y1、x2、y2的方式存放

ios版和c#canny不需要新建一個存放輸出對象,可以直接把輸入圖像設置為輸出圖像

以上的直線檢測都是用霍夫概率直線檢測houghLinesP,檢測到的直線都是有距離和坐標點的。

OpenCV官方教程中文版(For Python) PDF http://www.linuxidc.com/Linux/2015-08/121400.htm

Ubuntu Linux下安裝OpenCV2.4.1所需包 http://www.linuxidc.com/Linux/2012-08/68184.htm

Ubuntu 12.04 安裝 OpenCV2.4.2 http://www.linuxidc.com/Linux/2012-09/70158.htm

CentOS下OpenCV無法讀取視頻文件 http://www.linuxidc.com/Linux/2011-07/39295.htm

Ubuntu 12.04下安裝OpenCV 2.4.5總結 http://www.linuxidc.com/Linux/2013-06/86704.htm

Ubuntu 10.04中安裝OpenCv2.1九步曲 http://www.linuxidc.com/Linux/2010-09/28678.htm

基於QT和OpenCV的人臉識別系統 http://www.linuxidc.com/Linux/2011-11/47806.htm

[翻譯]Ubuntu 14.04, 13.10 下安裝 OpenCV 2.4.9 http://www.linuxidc.com/Linux/2014-12/110045.htm

OpenCV的詳細介紹:請點這裡
OpenCV的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved