最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenCV半小時(shí)掌握基本操作之直線(xiàn)檢測(cè)

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

【OpenCV】 ⚠️高手勿入! 半小時(shí)學(xué)會(huì)基本操作 ⚠️ 直線(xiàn)檢測(cè)

概述

OpenCV 是一個(gè)跨平臺(tái)的計(jì)算機(jī)視覺(jué)庫(kù), 支持多語(yǔ)言, 功能強(qiáng)大. 今天小白就帶大家一起攜手走進(jìn) OpenCV 的世界. (第 13 課)

在這里插入圖片描述

霍夫直線(xiàn)變換

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

在這里插入圖片描述

原理詳解

當(dāng)我們把直線(xiàn) y = kx + b 畫(huà)在指標(biāo)坐標(biāo)系上, 如下圖. 我們?cè)購(gòu)脑c(diǎn)引線(xiàn)段到直線(xiàn)上的任一點(diǎn).

在這里插入圖片描述

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

在這里插入圖片描述

代碼實(shí)戰(zhàn)

HoughLines

格式:

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

參數(shù):

  • image: 輸入圖像
  • rho: 線(xiàn)性搜索半徑步長(zhǎng), 以像素為單位
  • theta: 線(xiàn)性搜索步長(zhǎng), 以弧度為單位
  • threshold: 累計(jì)閾值

例子:

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

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

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

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

# 霍夫曼直線(xiàn)檢測(cè)
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))

# 標(biāo)題
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()

輸出結(jié)果:

在這里插入圖片描述

在這里插入圖片描述

HoughLinesP

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

格式:

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

參數(shù):

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

例子:

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

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

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

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

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

# 遍歷
for line in lines:

    # 獲取坐標(biāo)
    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))

# 標(biāo)題
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()

輸出結(jié)果:

在這里插入圖片描述

在這里插入圖片描述

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

相關(guān)文章

最新評(píng)論

柳州市| 赤城县| 罗田县| 蒙山县| 清徐县| 侯马市| 怀来县| 高陵县| 天水市| 邹平县| 辽阳市| 苗栗市| 错那县| 平和县| 科尔| 区。| 宜宾市| 东山县| 兰坪| 师宗县| 高要市| 微山县| 广西| 东平县| 威宁| 海阳市| 班玛县| 滨海县| 富源县| 南投市| 讷河市| 巴塘县| 阳春市| 恭城| 洪泽县| 什邡市| 乌拉特后旗| 大兴区| 全南县| 纳雍县| 水城县|