人妻系列无码专区av在线,国内精品久久久久久婷婷,久草视频在线播放,精品国产线拍大陆久久尤物

當前位置:首頁 > 編程技術 > 正文

opencv如何提取直線

opencv如何提取直線

在OpenCV中,提取圖像中的直線可以通過多種方法實現(xiàn),以下是一些常用的方法: 1. Hough Transform(霍夫變換)霍夫變換是檢測圖像中直線最常用的方法之一...

在OpenCV中,提取圖像中的直線可以通過多種方法實現(xiàn),以下是一些常用的方法:

1. Hough Transform(霍夫變換)

霍夫變換是檢測圖像中直線最常用的方法之一。

```python

import cv2

import numpy as np

讀取圖像

image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)

使用Canny算法進行邊緣檢測

edges = cv2.Canny(image, 50, 150, apertureSize=3)

使用霍夫變換檢測直線

lines = cv2.HoughLinesP(edges, 1, np.pi/180, threshold=100, minLineLength=100, maxLineGap=10)

繪制直線

for line in lines:

x1, y1, x2, y2 = line[0]

cv2.line(image, (x1, y1), (x2, y2), (255, 0, 0), 3)

顯示圖像

cv2.imshow('Lines', image)

cv2.waitKey(0)

cv2.destroyAllWindows()

```

2. RANSAC(隨機采樣一致性)

RANSAC是一種用于在噪聲數(shù)據(jù)中找到模型參數(shù)(如直線)的方法。

```python

import cv2

import numpy as np

讀取圖像

image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)

使用Canny算法進行邊緣檢測

edges = cv2.Canny(image, 50, 150, apertureSize=3)

使用RANSAC算法檢測直線

lines = cv2.HoughLinesP(edges, 1, np.pi/180, threshold=100, minLineLength=100, maxLineGap=10)

繪制直線

for line in lines:

x1, y1, x2, y2 = line[0]

cv2.line(image, (x1, y1), (x2, y2), (255, 0, 0), 3)

顯示圖像

cv2.imshow('Lines', image)

cv2.waitKey(0)

cv2.destroyAllWindows()

```

3. Hough Gradient Transform(霍夫梯度變換)

霍夫梯度變換是另一種檢測直線的方法,它結合了Canny邊緣檢測和霍夫變換。

```python

import cv2

import numpy as np

讀取圖像

image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)

使用Canny算法進行邊緣檢測

edges = cv2.Canny(image, 50, 150, apertureSize=3)

使用霍夫梯度變換檢測直線

lines = cv2.HoughLines(edges, 1, np.pi/180, threshold=100)

繪制直線

for line in lines:

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, (x1, y1), (x2, y2), (255, 0, 0), 3)

顯示圖像

cv2.imshow('Lines', image)

cv2.waitKey(0)

cv2.destroyAllWindows()

```

請注意,您需要根據(jù)實際圖像調(diào)整參數(shù),如Canny算法的閾值、霍夫變換的閾值和最小/最大線長度等。