opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并
基礎(chǔ)部分傳送門
python3+opencv學(xué)習(xí)筆記匯總目錄(適合基礎(chǔ)入門學(xué)習(xí))
進(jìn)階版筆記目錄:
python+opencv進(jìn)階版學(xué)習(xí)筆記目錄(適合有一定基礎(chǔ))
Numpy操作圖像
1.遍歷圖像每一個(gè)像素,并顏色取反
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]#遍歷每一個(gè)像素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) #計(jì)時(shí)裝置 t1 = cv.getTickCount()# access_pixels(src) t2 = cv.getTickCount() time = (t2-t1)/cv.getTickFrequency(); print("time : %s ms"%(time*1000))# #計(jì)算結(jié)束 cv.waitKey(0) cv.destroyAllWindows()OpenCV實(shí)現(xiàn)像素取反
cv2.bitwise_not(image)
bitwise:按位計(jì)算
not:取反
比numpy取反快幾十倍
2.numpy創(chuàng)建圖
多通道圖
單通道圖
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色彩空間(顏色模型)
色彩空間相互轉(zhuǎn)換
使用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.先把圖像轉(zhuǎn)換成hsv中,根據(jù)表來查找具體顏色處于什么區(qū)間,設(shè)置區(qū)間。
2.結(jié)合cv2.inRange()可以清晰看到某個(gè)顏色區(qū)域圖像位于圖像的什么地方。
用法cv2.inRange(img,low,high),函數(shù)會(huì)將位于兩個(gè)區(qū)域間的值置為255,位于區(qū)間外的值置為0。比如想要看到青色的區(qū)域處于圖像中的什么位置。
如綠色的區(qū)域是
lower_red = np.array([35, 43, 46])
upper_red = np.array([77, 255, 255])
如如所示,綠色被很好的找出來啦。為右圖白色部分。
應(yīng)用場景:得到的是二值圖像,可以用于查找物體輪廓。
讓綠色顯示出來
dst = cv2.bitwise_and(image1, image2, mask=mask)
讓兩個(gè)圖像除去mask部分的圖像進(jìn)行與運(yùn)算。)
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部分的圖像進(jìn)行與運(yùn)算。得到綠色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])
電氣專業(yè)的計(jì)算機(jī)小白,寫博文不容易。如果你覺得本文對你有用,請點(diǎn)個(gè)贊支持下。謝謝。
總結(jié)
以上是生活随笔為你收集整理的opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么汽车不换机油的情况下每次滴一点新机
- 下一篇: 14年2.8经典全顺用的是什么发动机?