python opencv檢測目標顏色

2021-09-30 14:11:05 字數 2139 閱讀 8303

# -*- coding:utf-8 -*-

__author__ = 'kingking'

__version__ = '1.0'

__date__ = '14/07/2017'

import cv2

import numpy as np

import time

if __name__ == '__main__':

img = cv2.imread('example.png')#讀入一幅影象

kernel_2 = np.ones((2,2),np.uint8)#2x2的卷積核

kernel_3 = np.ones((3,3),np.uint8)#3x3的卷積核

kernel_4 = np.ones((4,4),np.uint8)#4x4的卷積核

if img is not none:#判斷是否讀入

hsv = cv2.cvtcolor(img, cv2.color_bgr2hsv)#把bgr影象轉換為hsv格式

'''hsv模型中顏色的引數分別是:色調(h),飽和度(s),明度(v)

下面兩個值是要識別的顏色範圍

'''lower = np.array([20, 20, 20])#要識別顏色的下限

upper = np.array([30, 255, 255])#要識別的顏色的上限

#mask是把hsv中在顏色範圍內的區域變成白色,其他區域變成黑色

mask = cv2.inrange(hsv, lower, upper)

#下面四行是用卷積進行濾波

erosion = cv2.erode(mask,kernel_4,iterations = 1)

erosion = cv2.erode(erosion,kernel_4,iterations = 1)

dilation = cv2.dilate(erosion,kernel_4,iterations = 1)

dilation = cv2.dilate(dilation,kernel_4,iterations = 1)

#target是把原圖中的非目標顏色區域去掉剩下的影象

target = cv2.bitwise_and(img, img, mask=dilation)

#將濾波後的影象變成二值影象放在binary中

ret, binary = cv2.threshold(dilation,127,255,cv2.thresh_binary)

#在binary中發現輪廓,輪廓按照面積從小到大排列

p=0for i in contours:#遍歷所有的輪廓

x,y,w,h = cv2.boundingrect(i)#將輪廓分解為識別物件的左上角座標和寬、高

#在影象上畫上矩形(、左上角座標、右下角座標、顏色、線條寬度)

cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,),3)

#給識別物件寫上標號

font=cv2.font_hershey_******x

cv2.puttext(img,str(p),(x-10,y+10), font, 1,(0,0,255),2)#加減10是調整字元位置

p +=1

print '黃色方塊的數量是',p,'個'#終端輸出目標數量

cv2.imshow('target', target)

cv2.imshow('mask', mask)

cv2.imshow("prod", dilation)

cv2.imshow('img', img)

cv2.imwrite('img.png', img)#將畫上矩形的圖形儲存到當前目錄

while true:

key = chr(cv2.waitkey(15) & 255)

if key == 'q':

cv2.destroyallwindows()

break

原始影象

處理之後儲存的影象

python opencv 輪廓檢測

輪廓 contours 指的是有相同顏色或者密度,連線所有連續點的一條曲線。檢測輪廓的工作對形狀分析和物體檢測與識別都非常有用。在輪廓檢測之前,首先要對進行二值化或者canny邊緣檢測。在opencv中,尋找的物體是白色的,而背景必須是黑色的,因此預處理時必須保證這一點。import cv2 讀入i...

Python OpenCV人臉檢測

在 opencv根目錄 sources data haarcascades中提供了很多訓練好的分類器,我們使用haarcascade frontalface alt.xml分類器。haar cascade是paul viola和 michael jone在2001年,rapid object det...

python opencv 邊緣檢測

canny邊緣檢測器是一種被廣泛使用的演算法,並被認為是邊緣檢測最優的演算法,該方法使用了比高斯差分演算法更複雜的技巧,如多向灰度梯度和滯後閾值化 平滑影象 使用高斯濾波器與影象進行卷積,平滑影象,以減少邊緣檢測器上明顯的雜訊影響 計算影象的梯度和方向 影象中的邊緣可以指向各個方向,這裡計算影象的梯...