OpenCV識別圓(複雜背景下的圓)

2021-10-09 05:11:06 字數 3808 閱讀 7624

參考:

hsl(powerpoint中顏色模式之一)即色相、飽和度、亮度(英語:hue, saturation, lightness)。hsv(opencv中的顏色模式)即色相、飽和度、明度(英語:hue, saturation, value),又稱hsb,其中b即英語:brightness。

由於這裡使用opencv,所以暫時只關注hsv

opencv中的hsv changing colorspaces:

green = np.uint8([[

[0,255,0

]]])

hsv_green = cv.cvtcolor(green,cv.color_bgr2hsv)

# 所以cvtcolor函式不僅可以用來處理影象 也可以處理簡單的乙個數值變數

print

( hsv_green )[[

[60255255]]

]

inrange函式使用:

import cv2

import numpy as np

cap = cv2.videocapture(0)

while(1

):# take each frame

_, frame = cap.read(

)# convert bgr to hsv 將從bgr轉為hsv顏色模式

hsv = cv2.cvtcolor(frame, cv2.color_bgr2hsv)

# define range of blue color in hsv 定義要提取的顏色範圍(使用hsv表示)

lower_blue = np.array(

[110,50

,50])

upper_blue = np.array(

[130

,255

,255])

# bgr顏色表示 轉 hsv顏色表示 也可以使用 cvtcolor來表示

green = np.uint8([[

[0,255,0

]]])

hsv_green = cv.cvtcolor(green,cv.color_bgr2hsv)

# threshold the hsv image to get only blue colors

mask = cv2.inrange(hsv, lower_blue, upper_blue)

# bitwise-and mask and original image

res = cv2.bitwise_and(frame,frame, mask= mask)

cv2.imshow(

'frame'

,frame)

cv2.imshow(

'mask'

,mask)

cv2.imshow(

'res'

,res)

k = cv2.waitkey(5)

&0xff

if k ==27:

break

cv2.destroyallwindows(

)

參考: opencv-tutroal—image thresholding

自適應閾值:cv2.adaptivethreshold

官方文件-featuredetection-houghcircles()

注意:通常該功能可以很好地檢測圓心。 但是,它可能找不到正確的半徑。 您可以通過指定半徑範圍(minradius和maxradius)來輔助該功能。 或者,對於hough_gradient方法,您可以將maxradius設定為負數,以便僅在不進行半徑搜尋的情況下返回中心,並使用其他過程查詢正確的半徑。

dp 累加器解析度與影象解析度的反比。 例如,如果dp = 1,則累加器具有與輸入影象相同的解析度。 如果dp = 2,則累加器的寬度和高度是其一半。 對於hough_gradient_alt,建議值為dp = 1.5,除非需要檢測到一些很小的圓圈。

mindist 檢測到的圓心之間的最小距離。 如果引數太小,則除了真實的圓圈外,還可能會錯誤地檢測到多個鄰居圓圈。 如果太大,可能會錯過一些圓圈。

param1 第乙個 方法特定的引數。 對於hough_gradient和hough_gradient_alt,它是傳遞給canny邊緣檢測器的兩個閾值中的較高閾值(較低的閾值則小兩倍)。 請注意,hough_gradient_alt使用scharr演算法來計算影象導數,因此閾值通常應較高,例如300或正常**和對比影象。

param2 第二種方法特定的引數。

minradius 圓的最小半徑

maxradius 圓的最大半徑。 if <= 0,則使用最大影象尺寸. if < 0, hough_gradient 只返回圓心座標而不返回半徑。hough_gradient_alt 則始終計算圓半徑

circles=cv2.houghcircles(binary,cv2.hough_gradient,4,

25,param1=

100,param2=

40,minradius=

8,maxradius=15)

# 注意看引數 測試的話 可以把引數卡的死一點

# dp =4 因為要檢測的圓比較小

# mindist 要檢測的圓之間圓心之間的距離 自己目測看吧 越準確越好。。。 如果這個值過大或者過小,會發現很多圓都偏移的厲害(這個演算法對設定的引數非常看重,有些地方明明沒有圓,只要設定了這個引數,有點的差不多的都給你畫出個圓來)

# param1 是跟著乙個教程走的

# param2 如果你的圖中的圓非常標準 這個數就可以大點,越大表示所要檢測的圓越標準

# minradius和maxradius就根據自己圖的實際情況來定就好

其中param1是根據 opencv #010 circle detection using hough transform 這個教程裡的設定的

參考:

我確實是個不怎麼愛吃苦巧克力的人,也是個精力有限的人,所以,我這輩子,只能一直溫暖照亮乙個人呀

那些不解風情的人,也許只是從根源上杜絕了外界的**,排除了對自己所熱愛的事物造成傷害的可能,多麼克制善良的人啊

OpenCV 圓與矩形識別

最近乙個專案用到了影象識別,之前從未接觸過opencv,經過各種找教程,終於是搞懂了一些。整個具體流程大概是獲取影象 影象二值化,灰度圖 cvtcolor 影象降噪 gaussianblur 輪廓識別 cvfindcontours 形狀判斷。大多數教程很專業,各種引數分析看不懂,經過各種搜尋終於是搞...

OpenCV之圓的檢測識別

整個具體流程大概是獲取影象 影象二值化,灰度圖 cvtcolor 影象降噪 gaussianblur 輪廓識別 cvfindcontours 形狀判斷 在識別圓方面,opencv有內建的方法即霍夫圓變化 houghcircles edges,circles,cv hough gradient,1.5...

python opencv提取複雜背景下的文字

簡要說明我的思路 1.我的比較小,先放大。2.灰度處理。3.找到乙個區間值,對初步提取的文字進行膨脹及二次膨脹取輪廓。4。獲取到的輪廓面積,因為我這裡是固定的取裡4個文字,所以我對比取輪廓面積最大的4個 4.最後獲取輪廓的矩形座標點,採用透視變換生成字型 最後還有一些優化的地方 提取 import ...