1. 程式人生 > >OpenCV自學筆記12. 識別影象中的紅色圓形

OpenCV自學筆記12. 識別影象中的紅色圓形

識別影象中的紅色圓形

本小節用到的影象為:

這裡寫圖片描述

思路:

解決這個問題的思路如下:

Step2. 根據紅色在HSV顏色空間中的範圍,對影象進行分割。屬於紅色的畫素被保留下來(變為白色),其餘畫素置為黑色。

Step3. 形態學運算,對剛才得到的影象進行膨脹,以使紅色區域更明顯

Step4. 利用Hough變換,提取影象中的圓形

Step5. 繪製圓形

上述思路的程式碼如下:

import cv2
import numpy as np

# Step1. 轉換為HSV
img = cv2.imread('images/00.jpg'
) hue_image = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # Step2. 用顏色分割影象 low_range = np.array([0, 123, 100]) high_range = np.array([5, 255, 255]) th = cv2.inRange(hue_image, low_range, high_range) # Step3. 形態學運算,膨脹 dilated = cv2.dilate(th, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)), iterations=2
) # Step4. Hough Circle circles = cv2.HoughCircles(dilated, cv2.HOUGH_GRADIENT, 1, 100, param1=15, param2=7, minRadius=10, maxRadius=20) # Step5. 繪製 if circles is not None: x, y, radius = circles[0][0] center = (x, y) cv2.circle(img, center, radius, (0, 255, 0), 2) cv2.imshow('result', img) cv2.waitKey(0
) cv2.destroyAllWindows()

對上述函式做幾點說明:
1、cv2.cvtColor(img, cv2.COLOR_BGR2HSV):將影象由RGB顏色空間轉換到HSV顏色空間(H-色調、S-飽和度、V-亮度)。與RGB相比,HSV更為關注色彩,而不是亮度。因此可以用於提取固定顏色的物體,比如這裡的紅色小球。

  1. cv2.inRange(hue_img, low_range, high_range):low_range 和 high_range決定了色彩的範圍。

  2. dilated = cv2.dilate(th, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)), iterations=2):對影象進行膨脹操作,
    函式getStructuringElement,可以獲取常用的結構元素的形狀:矩形(包括線形)、橢圓(包括圓形)及十字形。MORPH_RECT, MORPH_ELLIPSE, MORPH_CROSS
    iterations,迭代的次數

  3. cv2.HoughCircles(dilated, cv2.HOUGH_GRADIENT, 1, 100, param1=15, param2=7, minRadius=10, maxRadius=20)

程式的執行結果為:

可以看出,程式準確地識別出了圓形~

這裡寫圖片描述

今天就到這裡, 拜~

這裡寫圖片描述