人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

OpenCV半小時(shí)掌握基本操作之圓圈檢測(cè)

發(fā)布日期:2022-02-01 08:36 | 文章來源:站長之家

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

概述

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

霍夫圓變換

霍夫圓變換 (Hough Circle Transform) 的原理和霍夫直線變換類似. 對(duì)于一條直線, 我們可以用參數(shù) (r, θ) 表示, 對(duì)于圓我們需要三個(gè)參數(shù) (x, y, r), 分別代表三個(gè)參數(shù) x 圓心, y 圓心, r, 半徑.

代碼實(shí)現(xiàn)

因?yàn)榛舴驁A檢測(cè)對(duì)噪聲比較敏感, 所以首先要對(duì)圖像做中值濾波.

基于效率考慮, Opencv 中實(shí)現(xiàn)的霍夫變換圓檢測(cè)是基于圖像梯度實(shí)現(xiàn), 分為兩步:

檢測(cè)變換, 發(fā)現(xiàn)可能的圓心基于第一步的基礎(chǔ)上從候選圓心開始計(jì)算最佳半徑大小

格式:

cv2.HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)

參數(shù):

image: 輸入圖像

method: 判別方法, 只有 HOUGH_GRADIENT (計(jì)算梯度) 一個(gè)方法

dp: 累計(jì)閾值

minDist: 間距, 小于間距判斷成一個(gè)圓

param1: Canny 邊緣檢測(cè)的最大閾值

param2: 在檢測(cè)階段圓心累加器閾值, 是否為圓形

例一

import numpy as np
import cv2
from matplotlib import pyplot as plt
# 讀取圖片
image = cv2.imread("map.jpg")
image_copy = image.copy()
# 均值遷移濾波
filter = cv2.pyrMeanShiftFiltering(image, 10, 100)
# 轉(zhuǎn)換成灰度圖
filter_gray = cv2.cvtColor(filter, cv2.COLOR_BGR2GRAY)
# 霍夫曼圓圈檢測(cè)
circles = cv2.HoughCircles(filter_gray, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=100, minRadius=0, maxRadius=0)
circles = np.uint16(np.around(circles))
# 遍歷
for circle in circles[0, :]:
 cv2.circle(image_copy, (circle[0], circle[1]), circle[2], (0, 0, 255), 2)
 cv2.circle(image_copy, (circle[0], circle[1]), 2, (255, 0, 0), 2)
# 圖片展示
f, ax = plt.subplots(2, 2, figsize=(12, 12))
# 子圖
ax[0, 0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
ax[0, 1].imshow(cv2.cvtColor(filter, cv2.COLOR_BGR2RGB))
ax[1, 0].imshow(filter_gray, "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 filter")
ax[1, 0].set_title("image gray")
ax[1, 1].set_title("image circle")
plt.show()
# 保存結(jié)果
cv2.imwrite("map_result.jpg", image_copy)

輸出結(jié)果:

例二

import numpy as np
import cv2
from matplotlib import pyplot as plt
# 讀取圖片
image = cv2.imread("coin.jpg")
image_copy = image.copy()
# 均值遷移濾波
filter = cv2.pyrMeanShiftFiltering(image, 10, 40)
# 轉(zhuǎn)換成灰度圖
filter_gray = cv2.cvtColor(filter, cv2.COLOR_BGR2GRAY)
# 霍夫曼圓圈檢測(cè)
circles = cv2.HoughCircles(filter_gray, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=100, minRadius=0, maxRadius=0)
circles = np.uint16(np.around(circles))
# 遍歷
for circle in circles[0, :]:
 cv2.circle(image_copy, (circle[0], circle[1]), circle[2], (0, 0, 255), 2)
 cv2.circle(image_copy, (circle[0], circle[1]), 2, (255, 0, 0), 2)
# 圖片展示
f, ax = plt.subplots(2, 2, figsize=(12, 12))
# 子圖
ax[0, 0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
ax[0, 1].imshow(cv2.cvtColor(filter, cv2.COLOR_BGR2RGB))
ax[1, 0].imshow(filter_gray, "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 filter")
ax[1, 0].set_title("image gray")
ax[1, 1].set_title("image circle")
plt.show()
# 保存結(jié)果
cv2.imwrite("coin_result.jpg", image_copy)

輸出結(jié)果:

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

美國快速服務(wù)器

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部