opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并
基礎部分傳送門
python3+opencv學習筆記匯總目錄(適合基礎入門學習)
進階版筆記目錄:
python+opencv進階版學習筆記目錄(適合有一定基礎)
Numpy操作圖像
1.遍歷圖像每一個像素,并顏色取反
import cv2 as cv import numpy as npdef access_pixels(image):print(image.shape);height = image.shape[0]width = image.shape[1]channels = image.shape[2]print("width : %s, height : %s channels : %s"%(width, height, channels))for row in range(height):for col in range(width):for c in range(channels):pv = image[row, col, c]#遍歷每一個像素image[row, col, c] = 255 - pv#取反cv.imshow("pixels_demo", image)print("--------- Hello Python ---------") src = cv.imread("1.jpg") # blue, green red cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src) #計時裝置 t1 = cv.getTickCount()# access_pixels(src) t2 = cv.getTickCount() time = (t2-t1)/cv.getTickFrequency(); print("time : %s ms"%(time*1000))# #計算結束 cv.waitKey(0) cv.destroyAllWindows()OpenCV實現像素取反
cv2.bitwise_not(image)
bitwise:按位計算
not:取反
比numpy取反快幾十倍
2.numpy創建圖
多通道圖
單通道圖
import cv2 as cv import numpy as np def create_image():img=np.zeros([400,400,1],np.uint8)img[:,:,0]=np.ones([400, 400])*100cv.imshow("new image", img)#cv.imwrite('test.jpg',img) print("--------- Hello Python ---------")create_image() cv.waitKey(0) cv.destroyAllWindows()色彩空間
HSI、HSV、RGB、CMY、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV色彩空間(顏色模型)
色彩空間相互轉換
使用cv2.cvtColor()
HSV中:H[0-100],S[0-255],V[0-255]
inRange查找顏色范圍
cv2.inRange(img,low,high)
HSV中:H[0-100],S[0-255],V[0-255]
1.先把圖像轉換成hsv中,根據表來查找具體顏色處于什么區間,設置區間。
2.結合cv2.inRange()可以清晰看到某個顏色區域圖像位于圖像的什么地方。
用法cv2.inRange(img,low,high),函數會將位于兩個區域間的值置為255,位于區間外的值置為0。比如想要看到青色的區域處于圖像中的什么位置。
如綠色的區域是
lower_red = np.array([35, 43, 46])
upper_red = np.array([77, 255, 255])
如如所示,綠色被很好的找出來啦。為右圖白色部分。
應用場景:得到的是二值圖像,可以用于查找物體輪廓。
讓綠色顯示出來
dst = cv2.bitwise_and(image1, image2, mask=mask)
讓兩個圖像除去mask部分的圖像進行與運算。)
import cv2 as cv import numpy as npdef color_space_demo(image):hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#cv.imshow("hsv", hsv)lower_red = np.array([35, 43, 46])upper_red = np.array([77, 255, 255])mask = cv.inRange(hsv, lower_red, upper_red)dst = cv.bitwise_and(image, image, mask=mask)#除去mask部分的圖像進行與運算。得到綠色cv.imshow('hsvred', dst)src = cv.imread("3.jpg") cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src) color_space_demo(src) cv.waitKey(0) cv.destroyAllWindows()通道分離與合并
通道分離
b, g, r = cv2.split(src)#分離
>
通道合并
src = cv2.merge([b, g, r])
電氣專業的計算機小白,寫博文不容易。如果你覺得本文對你有用,請點個贊支持下。謝謝。
總結
以上是生活随笔為你收集整理的opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么汽车不换机油的情况下每次滴一点新机
- 下一篇: 14年2.8经典全顺用的是什么发动机?