婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > OpenCV半小時掌握基本操作之直線檢測

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

熱門標簽:銀川電話機器人電話 怎么辦理400客服電話 B52系統電梯外呼顯示E7 萊蕪電信外呼系統 企業微信地圖標注 沈陽防封電銷電話卡 鶴壁手機自動外呼系統違法嗎 地圖標注多個 高德地圖標注收入咋樣

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

概述

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

霍夫直線變換

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

原理詳解

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

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

代碼實戰

HoughLines

格式:

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

參數:

  • 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

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

格式:

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

參數:

  • 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直線檢測內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • OpenCV半小時掌握基本操作之分水嶺算法
  • 最簡單的javascript對象實例代碼
  • OpenCV半小時掌握基本操作之傅里葉變換
  • OpenCV半小時掌握基本操作之圖像輪廓
  • OpenCV半小時掌握基本操作之直方圖
  • OpenCV半小時掌握基本操作之模板匹配
  • OpenCV半小時掌握基本操作之圓圈檢測
  • OpenCV半小時掌握基本操作之對象測量
  • OpenCV半小時掌握基本操作之像素加減乘除&邏輯運算

標簽:湘西 安慶 三亞 呼倫貝爾 烏魯木齊 葫蘆島 呼倫貝爾 銀川

巨人網絡通訊聲明:本文標題《OpenCV半小時掌握基本操作之直線檢測》,本文關鍵詞  OpenCV,半小時,掌握,基本操作,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《OpenCV半小時掌握基本操作之直線檢測》相關的同類信息!
  • 本頁收集關于OpenCV半小時掌握基本操作之直線檢測的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 聂荣县| 吉安县| 武胜县| 岑溪市| 石柱| 新龙县| 大庆市| 苗栗县| 高陵县| 青河县| 金乡县| 峨边| 轮台县| 炎陵县| 巴林右旗| 革吉县| 措美县| 海盐县| 铜山县| 汉源县| 正镶白旗| 黄骅市| 屯留县| 府谷县| 疏勒县| 虞城县| 大足县| 阿尔山市| 青铜峡市| 定南县| 西贡区| 东宁县| 靖安县| 酒泉市| 达州市| 清水县| 双牌县| 南汇区| 巴林右旗| 布尔津县| 马公市|