OpenCV 中的影象處理
阿新 • • 發佈:2019-01-10
顏色空間轉換
目標
• 你將學習如何對影象進行顏色空間轉換,比如從BGR 到灰度圖,或者從BGR 到HSV 等。
• 我沒還要建立一個程式用來從一幅影象中獲取某個特定顏色的物體。
目標
• 你將學習如何對影象進行顏色空間轉換,比如從BGR 到灰度圖,或者從BGR 到HSV 等。
• 我沒還要建立一個程式用來從一幅影象中獲取某個特定顏色的物體。
• 我們將要學習的函式有:cv2.cvtColor(),cv2.inRange() 等。
# -*- coding: utf-8 -*- """ Created on Mon Jan 22 14:06:05 2018 """ import cv2 import numpy as np from matplotlib import pyplot as plt #opencv 讀圖 img = cv2.imread("E:\\python\\opencv\\images\\demo0.png") #轉換顏色空間 #對於BGR$Gray 的轉換,我們要使用的flag 就是cv2.COLOR_BGR2GRAY。同樣對於BGR$HSV 的轉換,我們用的flag 就是cv2.COLOR_BGR2HSV。 #你還可以通過下面的命令得到所有可用的flag。 ''' flags=[i for i in dir(cv2) if i.startswith('COLOR_')] print flags ''' #注意:在OpenCV 的HSV 格式中,H(色彩/色度)的取值範圍是[0,179],S(飽和度)的取值範圍[0,255],V(亮度)的取值範圍[0,255]。但是不 #同的軟體使用的值可能不同。所以當你需要拿OpenCV 的HSV 值與其他軟體的HSV 值進行對比時,一定要記得歸一化。 #物體跟蹤 #提取的是一個藍色的物體例子 ''' cap=cv2.VideoCapture(0) while(1): # 獲取每一幀 ret,frame=cap.read() # 轉換到HSV hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) # 設定藍色的閾值 lower_blue=np.array([110,50,50]) upper_blue=np.array([130,255,255]) # 根據閾值構建掩模 mask=cv2.inRange(hsv,lower_blue,upper_blue) # 對原影象和掩模進行位運算 res=cv2.bitwise_and(frame,frame,mask=mask) # 顯示影象 cv2.imshow('frame',frame) cv2.imshow('mask',mask) cv2.imshow('res',res) k=cv2.waitKey(5)&0xFF if k==27: break # 關閉視窗 cv2.destroyAllWindows() ''' #影象平滑,OpenCV 提供的函式cv.filter2D() 可以讓我們對一幅影象進行卷積操作。 ''' kernel = np.ones((5,5),np.float32)/25 dst = cv2.filter2D(img,-1,kernel) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(dst),plt.title('Averaging') plt.xticks([]), plt.yticks([]) plt.show() ''' #這是由一個歸一化卷積框完成的。他只是用卷積框覆蓋區域所有畫素的平均值來代替中心元素。可以使用函式cv2.blur() 和cv2.boxFilter() 來完這個任務。 ''' blur = cv2.blur(img,(5,5)) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title('Blurred') plt.xticks([]), plt.yticks([]) plt.show() ''' #高斯模糊,實現的函式是cv2.GaussianBlur()。我們需要指定高斯核的寬和高(必須是奇數)。以及高斯函式沿X,Y 方向的標準差。 #如果我們只指定了X 方向的的標準差,Y 方向也會取相同值。如果兩個標準差都是0,那麼函式會根據核函式的大小自己計算。高斯濾波可以有效的從影象中去除高斯噪音。 #0 是指根據視窗大小(5,5)來計算高斯函式標準差 ''' blur = cv2.GaussianBlur(img,(5,5),0) '''