使用Python、OpenCV计算轮廓的中心
1. 使用Python、OpenCV計(jì)算輪廓的中心并標(biāo)記
2. 使用Python、OpenCV檢測(cè)輪廓的形狀并標(biāo)記
3. 使用顏色通道統(tǒng)計(jì)信息來(lái)標(biāo)記形狀的實(shí)際顏色并標(biāo)記
本博客的目標(biāo):(1)檢測(cè)圖像中每個(gè)形狀的輪廓,然后(2)計(jì)算輪廓的中心-也稱為質(zhì)心。
- 計(jì)算輪廓/形狀區(qū)域的中心;
- 僅使用輪廓屬性識(shí)別出各種形狀,例如圓形,正方形,矩形,三角形和五邊形;
- 標(biāo)記形狀的顏色;
效果圖:
1. 圖像預(yù)處理部分
考慮到圖像是人為繪制或者剪切的,圓形不夠圓,方形不夠方,矩形也不是完全矩形;首先進(jìn)行輪廓提取;
(1)轉(zhuǎn)換為灰度圖;
(2)高斯模糊處理以減少高頻噪聲,從而使輪廓檢測(cè)過(guò)程更加精確;
(3)圖像的二值化,通常會(huì)使用邊緣檢測(cè)和閾值化,這里用閾值化方法;通過(guò)調(diào)整適當(dāng)?shù)膮?shù),把圖像由背景黑色前景彩色調(diào)整成為背景黑色前景輪廓區(qū)域?yàn)榘咨?/strong>
2. 輪廓檢測(cè)
檢測(cè)輪廓后,計(jì)算輪廓區(qū)域的圖像矩;獲取輪廓的中心;并繪制在圖像上;
在計(jì)算機(jī)視覺(jué)和圖像處理中,圖像矩 通常用于表征圖像中對(duì)象的形狀。這些力矩捕獲了形狀的基本統(tǒng)計(jì)特性,包括對(duì)象的面積,質(zhì)心(即對(duì)象的中心(x,y)坐標(biāo)),方向以及其他所需的特性。對(duì)于處理分隔后的圖像尤其有用;
# python center_of_shape.py --image shapes_and_colors.png# 導(dǎo)入必要的包
import argparse
import imutils
import cv2# 構(gòu)建命令行參數(shù)
# --image 要處理的圖像路徑
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,help="path to the input image")
args = vars(ap.parse_args())# 加載圖像,轉(zhuǎn)換為灰度,使用5 x 5內(nèi)核進(jìn)行高斯平滑處理,閾值化
image = cv2.imread(args["image"])
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)[1]# 注意,在應(yīng)用閾值化之后,形狀是如何在黑色背景上表示為白色前景。
# 下一步是使用輪廓檢測(cè)??找到這些白色區(qū)域的位置:
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)# 遍歷輪廓集
for c in cnts:# 計(jì)算輪廓區(qū)域的圖像矩。 在計(jì)算機(jī)視覺(jué)和圖像處理中,圖像矩通常用于表征圖像中對(duì)象的形狀。這些力矩捕獲了形狀的基本統(tǒng)計(jì)特性,包括對(duì)象的面積,質(zhì)心(即,對(duì)象的中心(x,y)坐標(biāo)),方向以及其他所需的特性。M = cv2.moments(c)cX = int(M["m10"] / M["m00"])cY = int(M["m01"] / M["m00"])# 在圖像上繪制輪廓及中心cv2.drawContours(image, [c], -1, (0, 255, 0), 2)cv2.circle(image, (cX, cY), 7, (255, 255, 255), -1)cv2.putText(image, "center", (cX - 20, cY - 20),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)# 展示圖像cv2.imshow("Image", image)cv2.waitKey(0)
參考:
- https://www.pyimagesearch.com/2016/02/01/opencv-center-of-contour/
總結(jié)
以上是生活随笔為你收集整理的使用Python、OpenCV计算轮廓的中心的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 神探蝙蝠侠作者是谁啊?
- 下一篇: 使用Python,OpenCV读取视频的