Opencv識別圖片顏色并繪制輪廓實(shí)現(xiàn)代碼示例
一、實(shí)驗(yàn)原理
1、顏色空間轉(zhuǎn)換:

Opencv識別圖片顏色的邏輯
OpenCV 的默認(rèn)顏色空間為 BGR(藍(lán)、綠、紅),但識別特定顏色更適合在 HSV(色調(diào)、飽和度、亮度)顏色空間中進(jìn)行。
HSV 優(yōu)勢:能夠更方便地描述顏色范圍,用于篩選特定顏色區(qū)域。
2、顏色范圍過濾:

不同顏色的HSV值
利用 cv2.inRange 函數(shù),通過設(shè)定的顏色范圍,將指定顏色區(qū)域提取為二值掩膜。
3、圖像處理:
①濾波:
通過中值濾波去除噪點(diǎn),平滑圖像。濾波是應(yīng)用卷積來實(shí)現(xiàn)的,卷積的關(guān)鍵就是卷積核,下圖為卷積核濾波原理:

②形態(tài)學(xué)變換:
通過開運(yùn)算(先腐蝕后膨脹)進(jìn)一步消除小噪聲和孤立點(diǎn)。
4、輪廓提取和繪制:
- 利用 cv2.findContours 提取二值圖像的輪廓。

- 根據(jù)輪廓面積進(jìn)行過濾,保留符合條件的目標(biāo)區(qū)域。
- 使用 cv2.drawContours 在原圖上繪制輪廓。
cv2.drawContours(image, contours, contourIdx, color, thickness, lineType, hierarchy, maxLevel, offset)
二、實(shí)驗(yàn)代碼
import cv2
import numpy as np
# 1. 輸入圖片并調(diào)整大小
img = cv2.imread("./color_1.png")
if img is None:
print("無法加載圖片,請檢查路徑!")
exit()
img = cv2.resize(img, (0, 0), fx=0.7, fy=0.7)
# 2. 轉(zhuǎn)換 HSV 顏色空間
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 3. 定義顏色范圍并生成二值掩膜
yellow_min = np.array([26, 43, 46]) # 黃色下界
yellow_max = np.array([34, 255, 255]) # 黃色上界
img_mask = cv2.inRange(img_hsv, yellow_min, yellow_max)
# 4. 中值濾波去噪
img_blur = cv2.medianBlur(img_mask, 7)
# 5. 形態(tài)學(xué)變換 - 開運(yùn)算
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
img_open = cv2.morphologyEx(img_blur, cv2.MORPH_OPEN, kernel)
# 6. 輪廓提取
contours, _ = cv2.findContours(img_open, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 7. 遍歷輪廓并繪制
img_result = img.copy()
for contour in contours:
area = cv2.contourArea(contour)
if area < 200 or area > 200000: # 根據(jù)面積過濾無效輪廓
continue
cv2.drawContours(img_result, [contour], -1, (0, 0, 255), 2) # 繪制輪廓
# 8. 顯示結(jié)果
cv2.imshow("Original Image", img)
cv2.imshow("Filtered Contours", img_result)
cv2.waitKey(0)
cv2.destroyAllWindows()
三、實(shí)驗(yàn)現(xiàn)象
1、原始圖像:
顯示未處理的原始圖片,包含多個(gè)顏色區(qū)域。
2、顏色掩膜:
二值圖像僅顯示識別出的黃色區(qū)域,其余部分為黑色背景。
3、濾波和平滑:
- 濾波后噪點(diǎn)減少,目標(biāo)區(qū)域更加連續(xù)。
- 開運(yùn)算消除了孤立的噪聲點(diǎn),保留了主要的目標(biāo)區(qū)域。
4、輪廓繪制:
- 符合面積條件的輪廓被成功繪制,輪廓線為紅色。
- 無效的小輪廓被過濾,不影響結(jié)果的清晰度。
總結(jié)
到此這篇關(guān)于Opencv識別圖片顏色并繪制輪廓實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Opencv識別圖片顏色繪制輪廓內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python dataframe實(shí)現(xiàn)統(tǒng)計(jì)行列中零值的個(gè)數(shù)
這篇文章主要介紹了python dataframe實(shí)現(xiàn)統(tǒng)計(jì)行列中零值的個(gè)數(shù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
解決pandas無法讀取csv文件數(shù)據(jù)的問題
本文講述作者用Pandas讀取CSV文件時(shí)因參數(shù)設(shè)置不當(dāng)導(dǎo)致數(shù)據(jù)錯(cuò)位,通過調(diào)整delimiter和on_bad_lines參數(shù)最終解決問題,并強(qiáng)調(diào)正確參數(shù)配置對數(shù)據(jù)處理的重要性2025-07-07
python3射線法判斷點(diǎn)是否在多邊形內(nèi)
這篇文章主要為大家詳細(xì)介紹了python3射線法判斷點(diǎn)是否在多邊形內(nèi),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
Flask實(shí)現(xiàn)圖片的上傳、下載及展示示例代碼
這篇文章主要介紹了Flask實(shí)現(xiàn)圖片的上傳、下載及展示示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08

