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

OpenCV半小時掌握基本操作之直線檢測

 更新時間:2021年09月01日 11:06:49   作者:我是小白呀  
這篇文章主要介紹了OpenCV基本操作之直線檢測,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

【OpenCV】 ⚠️高手勿入! 半小時學會基本操作 ⚠️ 直線檢測

概述

OpenCV 是一個跨平臺的計算機視覺庫, 支持多語言, 功能強大. 今天小白就帶大家一起攜手走進 OpenCV 的世界. (第 13 課)

在這里插入圖片描述

霍夫直線變換

霍夫變換 (Hough Line Transform) 是圖像處理中的一種特征提取技術. 通過平面空間到極值坐標空間的轉換, 可以幫助我們實現(xiàn)直線檢測. 如圖:

在這里插入圖片描述

原理詳解

當我們把直線 y = kx + b 畫在指標坐標系上, 如下圖. 我們再從原點引線段到直線上的任一點.

在這里插入圖片描述

我們可以得到這條線段與 x 軸的夾角為 θ, 距離是 r. 對于直線上的任一點 (x0, y0), 我們可以得到公式:

在這里插入圖片描述

代碼實戰(zhàn)

HoughLines

格式:

cv2.HoughLines(image, rho, theta, threshold, lines=None, srn=None, stn=None, min_theta=None, max_theta=None)

參數(shù):

  • image: 輸入圖像
  • rho: 線性搜索半徑步長, 以像素為單位
  • theta: 線性搜索步長, 以弧度為單位
  • threshold: 累計閾值

例子:

import numpy as np
import cv2
from matplotlib import pyplot as plt

# 讀取圖片
image = cv2.imread("sudoku.jpg")
image_copy = image.copy()

# 轉換成灰度圖
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 邊緣檢測, Sobel算子大小為3
edges = cv2.Canny(image_gray, 170, 220, apertureSize=3)

# 霍夫曼直線檢測
lines = cv2.HoughLines(edges, 1, np.pi / 180, 250)

# 遍歷
for line in lines:
    # 獲取rho和theta
    rho, theta = line[0]
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a * rho
    y0 = b * rho
    x1 = int(x0 + 1000 * (-b))
    y1 = int(y0 + 1000 * (a))
    x2 = int(x0 - 1000 * (-b))
    y2 = int(y0 - 1000 * (a))
    cv2.line(image_copy, (x1, y1), (x2, y2), (0, 0, 255), thickness=5)

# 圖片展示
f, ax = plt.subplots(2, 2, figsize=(12, 12))

# 子圖
ax[0, 0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
ax[0, 1].imshow(image_gray, "gray")
ax[1, 0].imshow(edges, "gray")
ax[1, 1].imshow(cv2.cvtColor(image_copy, cv2.COLOR_BGR2RGB))

# 標題
ax[0, 0].set_title("original")
ax[0, 1].set_title("image gray")
ax[1, 0].set_title("image edge")
ax[1, 1].set_title("image line")

plt.show()

輸出結果:

在這里插入圖片描述

在這里插入圖片描述

HoughLinesP

此函數(shù)在 HoughLines 的基礎上末尾加了一個代表概率 (Probabilistic) 的 P, 表明它可以采用累計概率霍夫變換, 來找出二值圖像中的直線.

格式:

HoughLinesP(image, rho, theta, threshold, lines=None, minLineLength=None, maxLineGap=None)

參數(shù):

  • image: 輸入圖像
  • rho: 線性搜索半徑步長, 以像素為單位
  • theta: 線性搜索步長, 以弧度為單位
  • threshold: 累計閾值
  • minLineLength: 最短直線長度
  • maxLineGap: 最大孔隙距離

例子:

import numpy as np
import cv2
from matplotlib import pyplot as plt

# 讀取圖片
image = cv2.imread("sudoku.jpg")
image_copy = image.copy()

# 轉換成灰度圖
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 邊緣檢測, Sobel算子大小為3
edges = cv2.Canny(image_gray, 170, 220, apertureSize=3)

# 霍夫曼直線檢測
lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 100, minLineLength=100, maxLineGap=10)

# 遍歷
for line in lines:

    # 獲取坐標
    x1, y1, x2, y2 = line[0]
    cv2.line(image_copy, (x1, y1), (x2, y2), (0, 0, 255), thickness=5)


# 圖片展示
f, ax = plt.subplots(2, 2, figsize=(12, 12))

# 子圖
ax[0, 0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
ax[0, 1].imshow(image_gray, "gray")
ax[1, 0].imshow(edges, "gray")
ax[1, 1].imshow(cv2.cvtColor(image_copy, cv2.COLOR_BGR2RGB))

# 標題
ax[0, 0].set_title("original")
ax[0, 1].set_title("image gray")
ax[1, 0].set_title("image edge")
ax[1, 1].set_title("image line")

plt.show()

輸出結果:

在這里插入圖片描述

在這里插入圖片描述

到此這篇關于OpenCV半小時掌握基本操作之直線檢測的文章就介紹到這了,更多相關OpenCV直線檢測內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • pytorch cuda上tensor的定義 以及減少cpu的操作詳解

    pytorch cuda上tensor的定義 以及減少cpu的操作詳解

    這篇文章主要介紹了pytorch cuda上tensor的定義 以及減少cpu的操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 封裝一個python的pymysql操作類

    封裝一個python的pymysql操作類

    這篇文章主要介紹了封裝一個python的pymysql操作類的相關資料,需要的朋友可以參考下
    2022-12-12
  • python3實現(xiàn)ftp服務功能(服務端 For Linux)

    python3實現(xiàn)ftp服務功能(服務端 For Linux)

    這篇文章主要介紹了python3實現(xiàn)ftp服務功能,服務端 For Linux,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Python入門開發(fā)教程  windows下搭建開發(fā)環(huán)境vscode的步驟詳解

    Python入門開發(fā)教程 windows下搭建開發(fā)環(huán)境vscode的步驟詳解

    大家都知道Python是跨平臺的,它可以運行在Windows、Mac和各種Linux/Unix系統(tǒng)上。在Windows上寫Python程序,放到Linux上也是能夠運行的,今天給大家分享Python開發(fā)環(huán)境搭建vscode的步驟,一起看看吧
    2021-07-07
  • OpenCV 表盤指針自動讀數(shù)的示例代碼

    OpenCV 表盤指針自動讀數(shù)的示例代碼

    這篇文章主要介紹了OpenCV 表盤指針自動讀數(shù)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • python的sorted用法詳解

    python的sorted用法詳解

    在本篇文章里小編給大家整理了關于python的sorted用法以及相關實例內容,有需要的朋友們參考學習下。
    2019-06-06
  • 使用Matplotlib創(chuàng)建基本圖表的詳細指南

    使用Matplotlib創(chuàng)建基本圖表的詳細指南

    Matplotlib 是一個功能強大的 Python 庫,用于創(chuàng)建各種類型的圖表和可視化,在本文中,我們將提供一個完整的指南,介紹如何使用 Matplotlib 創(chuàng)建基本的圖表,包括折線圖、散點圖、柱狀圖和餅圖,感興趣的小伙伴跟著小編一起來看看吧
    2024-05-05
  • 淺析Python中的多進程與多線程的使用

    淺析Python中的多進程與多線程的使用

    這篇文章主要介紹了Python中的多進程與多線程,線程與進程一直是Python學習和運用當中的重點和難點,本文采用簡單的例子進行講解,需要的朋友可以參考下
    2015-04-04
  • 通過cmd進入python的步驟

    通過cmd進入python的步驟

    在本篇文章里小編給大家整理了關于通過cmd進入python的步驟和實例,需要的朋友們可以參考下。
    2020-06-06
  • python線程join方法原理解析

    python線程join方法原理解析

    這篇文章主要介紹了python線程join方法原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02

最新評論