欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java+opencv3.2.0實(shí)現(xiàn)hough直線檢測(cè)

 更新時(shí)間:2018年02月10日 08:33:03   作者:帥氣的貓爪  
這篇文章主要為大家詳細(xì)介紹了Java+opencv3.2.0之hough直線檢測(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

發(fā)展史:

1962年由PaulHough首次提出,用來(lái)檢測(cè)直線和曲線。
1972年由Richard Duda & Peter Hart推廣使用,擴(kuò)展到任意形狀物體的識(shí)別。

原理:

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

標(biāo)準(zhǔn)hough變換:

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

參數(shù)說(shuō)明:

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

示例代碼:

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);
  }

累計(jì)概率hough變換:

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

參數(shù)說(shuō)明:

image:源圖像
lines:hough變換后儲(chǔ)存檢測(cè)到的線條的輸出矢量
rho:以像素為單位的距離精度
theta:以弧度為單位的角度精度
threshold:識(shí)別某部分為一條直線時(shí)必須達(dá)到的值
minLineLength:最低線段的長(zhǎng)度,默認(rèn)為0
maxLineGap:允許將同一行點(diǎn)與點(diǎn)之間連接起來(lái)的最大的距離,默認(rèn)為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);
 }

源圖片:

標(biāo)準(zhǔn)hough變換結(jié)果:


累計(jì)概率hough變換結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Apache?Hudi異步Clustering部署操作的掌握

    Apache?Hudi異步Clustering部署操作的掌握

    這篇文章主要介紹了Apache?Hudi異步Clustering部署操作的掌握,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-03-03
  • LeetCode程序員面試題之無(wú)重復(fù)字符的最長(zhǎng)子串

    LeetCode程序員面試題之無(wú)重復(fù)字符的最長(zhǎng)子串

    Java計(jì)算無(wú)重復(fù)字符的最長(zhǎng)子串是一種常見(jiàn)的字符串處理算法,它的目的是找出一個(gè)字符串中無(wú)重復(fù)字符的最長(zhǎng)子串。該算法可以很好地解決一些字符串處理問(wèn)題,比如尋找字符串中重復(fù)字符的位置,以及計(jì)算字符串中無(wú)重復(fù)字符的最長(zhǎng)子串的長(zhǎng)度。
    2023-02-02
  • SpringBoot接受前臺(tái)參數(shù)的6種方式以及統(tǒng)一響應(yīng)代碼示例

    SpringBoot接受前臺(tái)參數(shù)的6種方式以及統(tǒng)一響應(yīng)代碼示例

    這篇文章主要給大家介紹了關(guān)于SpringBoot接受前臺(tái)參數(shù)的6種方式以及統(tǒng)一響應(yīng)的相關(guān)資料,前端負(fù)責(zé)展示頁(yè)面和用戶交互,而后端則負(fù)責(zé)處理業(yè)務(wù)邏輯和數(shù)據(jù)存儲(chǔ),在這種架構(gòu)下前端需要將用戶輸入的數(shù)據(jù)發(fā)送給后端進(jìn)行處理,需要的朋友可以參考下
    2023-12-12
  • IKAnalyzer結(jié)合Lucene實(shí)現(xiàn)中文分詞(示例講解)

    IKAnalyzer結(jié)合Lucene實(shí)現(xiàn)中文分詞(示例講解)

    下面小編就為大家?guī)?lái)一篇IKAnalyzer結(jié)合Lucene實(shí)現(xiàn)中文分詞(示例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Spring init-method與destroy-method屬性的用法解析

    Spring init-method與destroy-method屬性的用法解析

    這篇文章主要介紹了Spring init-method與destroy-method屬性的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JavaCV實(shí)現(xiàn)人臉檢測(cè)功能

    JavaCV實(shí)現(xiàn)人臉檢測(cè)功能

    這篇文章主要為大家詳細(xì)介紹了JavaCV實(shí)現(xiàn)人臉檢測(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java實(shí)戰(zhàn)之酒店人事管理系統(tǒng)的實(shí)現(xiàn)

    Java實(shí)戰(zhàn)之酒店人事管理系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了如何用Java實(shí)現(xiàn)酒店人事管理系統(tǒng),文中采用的技術(shù)有:JSP、Spring、SpringMVC、MyBatis等,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-03-03
  • java  中Excel轉(zhuǎn)shape file的實(shí)例詳解

    java 中Excel轉(zhuǎn)shape file的實(shí)例詳解

    這篇文章主要介紹了java 中Excel轉(zhuǎn)shape file的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09
  • maven多moudle項(xiàng)目在idea里面顯示多個(gè)root問(wèn)題及解決

    maven多moudle項(xiàng)目在idea里面顯示多個(gè)root問(wèn)題及解決

    這篇文章主要介紹了maven多moudle項(xiàng)目在idea里面顯示多個(gè)root問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java Grpc實(shí)例創(chuàng)建負(fù)載均衡詳解

    Java Grpc實(shí)例創(chuàng)建負(fù)載均衡詳解

    這篇文章主要介紹了Java Grpc實(shí)例創(chuàng)建負(fù)載均衡詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論