PyOpenCV 基本操作
?
目錄
1. 圖片加載、顯示和保存
2. 圖像顯示窗口創(chuàng)建與銷毀
3. 圖片寬、高、通道數(shù)獲取
4. 圖像像素?cái)?shù)目和圖像數(shù)據(jù)類型的獲取
5. 生成指定大小的空圖像, ?生成指定大小的空圖像
6. 訪問和操作圖像像素
?
7.? 圖像三通道分離和合并
8. 抓取攝像頭
?
1. 圖片加載、顯示和保存
import cv2 # 生成圖片 img = cv2.imread(r'C:\Users\Desktop\test1.jpg') # 生成灰色圖片 imgGrey = cv2.imread("1.jpg", 0) #? 展示原圖 cv2.imshow("img", img) #? 展示灰色圖片 #cv2.imshow("imgGrey", imgGrey) #? 等待圖片的關(guān)閉 cv2.waitKey(0) # 保存灰色圖片 #cv2.imwrite("Copy.jpg", imgGrey)?
2. 圖像顯示窗口創(chuàng)建與銷毀
? ? cv2.namedWindow(窗口名,屬性) 創(chuàng)建一個(gè)窗口,屬性—指定窗口大小模式:
? ? cv2.WINDOW_AUTOSIZE:根據(jù)圖像大小自動(dòng)創(chuàng)建大小
? ? cv2.WINDOW_NORMAL:窗口大小可調(diào)整
? ? cv2.destoryAllWindows(窗口名) 刪除任何建立的窗口
?
import cv2# 生成圖片img = cv2.imread(r'C:\Users\Desktop\test1.jpg')cv2.namedWindow("img", cv2.WINDOW_NORMAL)cv2.imshow("img", img)cv2.waitKey()cv2.destroyAllWindows()?
3. 圖片寬、高、通道數(shù)獲取
img.shape 返回圖像高(圖像矩陣的行數(shù))、寬(圖像矩陣的列數(shù))和通道數(shù)3個(gè)屬性組成的元組,若圖像是非彩色圖,則只返回高和寬組成的元組。
import cv2img = cv2.imread(r'C:\Users\Desktop\test1.jpg') imgGray = cv2.imread(r'C:\Users\Desktop\test1.jpg', 0)print('****img*****) print( img.shape) print('width: ', img.shape[0]) print('heigh: ', img.shape[1]) print('channel: ', img.shape[2])print('\n\n***imgGray**') print(imgGray.shape) print('width: ', imgGray.shape[0]) print('heigh: ', imgGray.shape[1]) print('channel: ', imgGray.shape[2])?
4. 圖像像素?cái)?shù)目和圖像數(shù)據(jù)類型的獲取
圖像矩陣img的size屬性和dtype分別對應(yīng)圖像的像素總數(shù)目和圖像數(shù)據(jù)類型。一般情況下,圖像的數(shù)據(jù)類型是uint8。
import cv2img = cv2.imread(r'C:\Users\Desktop\test1.jpg')print('圖像類型: ', type(img)) print('圖像像素點(diǎn)數(shù): ', img.size) print('圖像像素灰度值類型:', img.dtype)?
5. 生成指定大小的空圖像, ?生成指定大小的空圖像
import cv2 import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg') imgZero = np.zeros(img.shape, np.uint8) imgFix = np.zeros((300, 500, 3), np.uint8)cv2.imshow("imgZero", imgZero) cv2.imshow("imgFix", imgFix) cv2.waitKey() ?6. 訪問和操作圖像像素
?OpenCV中圖像矩陣的順序是B、G、R。可以直接通過坐標(biāo)位置訪問和操作圖像像素。
import cv2 import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')pixel_50_100 = img[50, 100] #返回3個(gè)值,分別是該像素點(diǎn)在BGR通道的值 print(pixel_50_100)img[50, 100] = (0, 0, 255)cv2.imshow("img", img) cv2.waitKey()分開訪問圖像某一通道像素值也very方便
import cv2 import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')img[0:100, 100:200, 0] = 255 img[100:200, 200:300, 1] = 255 img[200:300, 300:400, 2] = 255cv2.imshow("img", img) cv2.waitKey()更改圖像某一矩形區(qū)域的像素值也很方便:
import cv2 import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg') img[0:50, 1:100] = (0, 0, 255)cv2.imshow("img", img) cv2.waitKey()?
7.? 圖像三通道分離和合并
import cv2 import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')b, g, r = cv2.split(img)# b = cv2.split(img)[0] # g = cv2.split(img)[1] # r = cv2.split(img)[2]merged = cv2.merge([b, g, r])cv2.imshow("Blue", b) cv2.imshow("Green", g) cv2.imshow("Red", r)cv2.imshow("Merged", merged) cv2.waitKey()?
8. 抓取攝像頭
import cv2 import numpy as npcap? = cv2.VideoCapture(0)for i in range(0, 19):print(cap.get(i)) while(1):ret, frame = cap.read()hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)lower_blue = np.array([100, 47, 47])upper_blue = np.array([124, 255,255])mask = cv2.inRange(hsv, lower_blue, upper_blue) #藍(lán)色掩模res = cv2.bitwise_and(frame, frame, mask = mask)cv2.imshow(u"Capture", frame)cv2.imshow(u"mask", mask)cv2.imshow(u"res", res)key = cv2.waitKey(1)if key & 0xff == ord('q') or key == 27:print(frame.shape,ret)breakcap.release() cv2.destroyAllWindows()?
總結(jié)
以上是生活随笔為你收集整理的PyOpenCV 基本操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PyOpenCV 坐标系统
- 下一篇: Pytorch 加载预训练模型参数时出