下面是一個(gè)需求,識(shí)別圖片中的導(dǎo)線,要在圖像中檢測(cè)導(dǎo)線,我們需要采用不同于直線檢測(cè)的方法。由于OpenCV沒有直接的曲線檢測(cè)函數(shù),如同它對(duì)直線提供的HoughLines
或HoughLinesP
,檢測(cè)曲線通常需要更多的圖像處理步驟和算法:
-
邊緣檢測(cè):首先使用Canny邊緣檢測(cè)器檢測(cè)圖像中的邊緣。
-
尋找輪廓:然后使用
cv2.findContours
來尋找邊緣連接的輪廓。輪廓可能對(duì)應(yīng)于圖像中的曲線。 -
輪廓分析:分析這些輪廓,篩選出滿足特定條件的輪廓,如長(zhǎng)度、曲率等。
-
繪制輪廓:在原始圖像上繪制這些輪廓。
下面是成品代碼:
# coding=UTF-8
import cv2
import numpy as np
def load_and_detect_curves(image_path, new_width, new_height):
# 加載圖像
image = cv2.imread(image_path)
if image is None:
print("無法加載圖像")
return
# 調(diào)整圖像尺寸
resized_image = cv2.resize(image, (new_width, new_height))
# 將圖像轉(zhuǎn)換為灰度圖
gray_image = cv2.cvtColor(resized_image, cv2.COLOR_BGR2GRAY)
# 應(yīng)用高斯模糊
blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)
# 使用Canny邊緣檢測(cè)器檢測(cè)邊緣
edges = cv2.Canny(blurred_image, 50, 150, apertureSize=3)
# 尋找輪廓
contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 篩選和繪制輪廓
for contour in contours:
# 可以在這里添加條件篩選特定輪廓
if len(contour) > 100: # 例如,篩選長(zhǎng)度大于100的輪廓
cv2.drawContours(resized_image, [contour], -1, (0, 255, 0), 2)
# 顯示結(jié)果
cv2.imshow('Detected Curves', resized_image)
if cv2.waitKey(0) & 0xFF == ord('q'):
cv2.destroyAllWindows()
# 使用函數(shù)
load_and_detect_curves('./images/2.png', 800, 600) # 替換為你的圖像路徑和期望的尺寸
# load_and_detect_curves('./images/demo.jpg', 800, 600) # 替換為你的圖像路徑和期望的尺寸
下面是運(yùn)行效果:文章來源:http://www.zghlxwxcb.cn/news/detail-776351.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-776351.html
到了這里,關(guān)于利用OpenCV實(shí)現(xiàn)圖片中導(dǎo)線的識(shí)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!