亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java+opencv3.2.0怎么實現hough直線檢測

發布時間:2021-06-11 13:50:48 來源:億速云 閱讀:165 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關Java+opencv3.2.0怎么實現hough直線檢測,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

hough變換是圖像處理中的一種特征提取技術,該過程在一個參數空間中通過計算累計結果的局部最大值得到一個符合特定形狀的集合作為hough變換結果。

發展史:

1962年由PaulHough首次提出,用來檢測直線和曲線。
1972年由Richard Duda & Peter Hart推廣使用,擴展到任意形狀物體的識別。

原理:

一條直線在直角坐標系下的表示形式為y=k*x+b,而在極坐標系下表示為r=x*cos(theta)+y*sin(theta)。hough變換的思想為在直角坐標系下的一個點對應極坐標系下的一條直線,同樣,極坐標系下的一個點對應直角坐標系下的一條直線。在直角坐標系中的直線,斜率和截距是一定的,這樣這條直線上的所有點在極坐標系中聚焦于一點,這樣的聚焦點就代表了直角坐標系中的直線。
對于直線x=c,在實際應用中,是采用參數方程p=x*cos(theta)+y*sin(theta)。這樣,圖像平面上的一個點就對應到參數r—theta平面上的一條曲線上,其它的還是一樣。

標準hough變換:

Imgproc.HoughLines(Mat image, Mat lines, double rho, double theta, int threshold, double srn, double stn, double min_theta, double max_theta)

參數說明:

image:源圖像
lines:hough變換后儲存檢測到的線條的輸出矢量
rho:以像素為單位的距離精度
theta:以弧度為單位的角度精度
threshold:識別某部分為一條直線時必須達到的值
srn:rho參數的除數距離,有默認值0
stn:theta參數的除數距離,默認值0
min_theta:檢測到的直線的最小角度
max_theta:檢測到的直線的最大角度

示例代碼:

public static void main(String[] args)
 {
 System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

 Mat srcImage = Imgcodecs.imread("F:\\6597210504144579394.jpg");
 Mat dstImage = srcImage.clone();
 Imgproc.Canny(srcImage, dstImage, 400, 500, 5, false);
 Mat storage = new Mat();
 Imgproc.HoughLines(dstImage, storage, 1, Math.PI / 180, 200, 0, 0, 0, 10);
 for (int x = 0; x < storage.rows(); x++)
 {
  double[] vec = storage.get(x, 0);

  double rho = vec[0];
  double theta = vec[1];

  Point pt1 = new Point();
  Point pt2 = new Point();

  double a = Math.cos(theta);
  double b = Math.sin(theta);

  double x0 = a * rho;
  double y0 = b * rho;

  pt1.x = Math.round(x0 + 1000 * (-b));
  pt1.y = Math.round(y0 + 1000 * (a));
  pt2.x = Math.round(x0 - 1000 * (-b));
  pt2.y = Math.round(y0 - 1000 * (a));

  if (theta >= 0)
  {
  Imgproc.line(srcImage, pt1, pt2, new Scalar(255, 255, 255, 255), 1, Imgproc.LINE_4, 0);
  }
  }
  Imgcodecs.imwrite("F:\\dst2.jpg", srcImage);
  }

累計概率hough變換:

Imgproc.HoughLinesP(Mat image, Mat lines, double rho, double theta, int threshold, double minLineLength, double maxLineGap)

參數說明:

image:源圖像
lines:hough變換后儲存檢測到的線條的輸出矢量
rho:以像素為單位的距離精度
theta:以弧度為單位的角度精度
threshold:識別某部分為一條直線時必須達到的值
minLineLength:最低線段的長度,默認為0
maxLineGap:允許將同一行點與點之間連接起來的最大的距離,默認為0

示例代碼:

public static void main(String[] args)
 {
 System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
 Mat srcImage = Imgcodecs.imread("F:\\6597210504144579394.jpg");
 Mat dstImage = srcImage.clone();
 Imgproc.Canny(srcImage, dstImage, 400, 500, 5, false);
 Mat storage = new Mat();
 Imgproc.HoughLinesP(dstImage, storage, 1, Math.PI / 180, 50, 0, 0);
 for (int x = 0; x < storage.rows(); x++)
 {
  double[] vec = storage.get(x, 0);
  double x1 = vec[0], y1 = vec[1], x2 = vec[2], y2 = vec[3];
  Point start = new Point(x1, y1);
  Point end = new Point(x2, y2);
  Imgproc.line(srcImage, start, end, new Scalar(255, 255, 255, 255), 1, Imgproc.LINE_4, 0);
 }
 Imgcodecs.imwrite("F:\\dst2.jpg", srcImage);
 }

源圖片:

Java+opencv3.2.0怎么實現hough直線檢測

標準hough變換結果:

Java+opencv3.2.0怎么實現hough直線檢測

累計概率hough變換結果:

Java+opencv3.2.0怎么實現hough直線檢測

關于“Java+opencv3.2.0怎么實現hough直線檢測”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

峨眉山市| 芜湖市| 河曲县| 乐安县| 潞城市| 新蔡县| 贺州市| 韩城市| 武功县| 平果县| 博白县| 襄汾县| 南部县| 姜堰市| 临洮县| 阳西县| 奈曼旗| 芦山县| 辽阳市| 广南县| 安吉县| 云南省| 梅河口市| 同德县| 临澧县| 平利县| 金山区| 岢岚县| 社会| 洪洞县| 青田县| 连江县| 武夷山市| 上饶县| 灵璧县| 恩施市| 资中县| 彝良县| 铅山县| 扎兰屯市| 朝阳县|