快速入門(mén)
OpenCV 是 Intel? 開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)。它由一系列 C 函數(shù)和少量 C++ 類(lèi)構(gòu)成, 實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法。 OpenCV 擁有包括 300 多個(gè) C 函數(shù)的跨平臺(tái)的中、高層 API。它不依賴于其它的外部庫(kù)——盡管也 可以使用某些外部庫(kù)。 OpenCV 對(duì)非商業(yè)應(yīng)用和商業(yè)應(yīng)用都是免費(fèi)的
OpenCV安裝
pip install opencv-python
安裝成功后打印版本進(jìn)行測(cè)試
import cv2
print(cv2.__version__)
4.8.0
讀取圖片
import cv2
import numpy as np
img=cv2.imread('349926.jpeg')
print('image size',np.shape(img),img.shape)
cv2.imshow('Image', img)
cv2.waitKey(0)
image size (1344, 960, 3) (1344, 960, 3)
圖像縮放、裁剪、顏色變化
圖像縮放
openCV中的參數(shù) 一般順序 (w,h) (x,y) 注意與numpy維度之間 的區(qū)別
# 獲取圖像的高h(yuǎn)和寬w
h, w = img.shape[:2]
# 設(shè)置縮放倍數(shù)為2
scale = 2
# 將圖像縮放為原來(lái)的2倍大小
imgResize1 = cv2.resize(img, (int(w*scale), int(h*scale)))
# 顯示縮放后的圖像
# cv2.imshow("resize1", imgResize1)
# 打印縮放后圖像的shape
print("imgResize1 size", imgResize1.shape)
# 設(shè)置縮放倍數(shù)為0.5
scale = 0.5
# 將圖像縮放為原來(lái)的0.5倍大小
imgResize2 = cv2.resize(img, (int(w*scale), int(h*scale)))
cv2.imshow("resize2", imgResize2)
print("imgResize2 size", imgResize2.shape)
cv2.waitKey(0)
imgResize1 size (2688, 1920, 3)
imgResize2 size (672, 480, 3)
cv2.resize
- 輸入?yún)?shù):
- src:要縮放的圖像,類(lèi)型為UMat
- dsize:目標(biāo)大小,類(lèi)型為包含兩個(gè)int的序列,比如(寬,高)
- dst:可選的輸出圖像,類(lèi)型為UMat
- fx:可選的橫向縮放因子,類(lèi)型為float
- fy:可選的縱向縮放因子,類(lèi)型為float
- interpolation:可選的插值方法,類(lèi)型為int
圖像裁剪、顏色變化
等待任意按鍵 0 表示一直等待 加任意數(shù)字(ms) 表示等待一段時(shí)間 后繼續(xù)執(zhí)行
# 圖像剪裁
imgCropped = img[int(h/3):int(2*h/3), int(w/3):int(w*2/3)]
# 顯示剪裁后的圖像
cv2.imshow("cropped", imgCropped)
# 打印剪裁后圖像大小
print("imgcropped size", imgCropped.shape)
# 顏色變換 - RGB,將BGR顏色空間轉(zhuǎn)換到RGB顏色空間 BGR是opencv默認(rèn)的顏色順序,代表藍(lán)綠紅通道(Blue, Green, Red)。但大多數(shù)圖像處理和機(jī)器學(xué)習(xí)算法都采用RGB顏色順序,代表紅綠藍(lán)(Red, Green, Blue)。
#因此在opencv讀取圖片后,經(jīng)常需要將BGR轉(zhuǎn)為RGB,以便后續(xù)算法處理。
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
imgRGB=cv2.resize(imgRGB,(int(w*0.5),int(h*0.5)))
# 顏色變換 - 灰度化
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgGray=cv2.resize(imgGray,(int(w*0.5),int(h*0.5)))
# 打印灰度圖像大小
print("imgGray size", imgGray.shape)
# 顯示 RGB 圖像
cv2.imshow("RGB", imgRGB)
# 顯示灰度圖像
cv2.imshow("Gray", imgGray)
# 等待按鍵輸入
cv2.waitKey(0)
imgcropped size (448, 320, 3)
imgGray size (672, 480)
cv2.cvtColor
- BGR: OpenCV默認(rèn)的顏色空間,藍(lán)綠紅通道
- GRAY: 灰度圖像,亮度作為像素值
- HSV: Hue Saturation Value,色調(diào)飽和度空間
- YCrCb: 亮度(luma)和色度(chroma)空間,用于壓縮和編碼
- HLS: Hue Lightness Saturation,hue亮度飽和度空間
- Lab: CIE Lab*空間,L為亮度,a和b表示顏色opponent維度
- RGB: 紅綠藍(lán)additive色彩空間,用于顯示
讀取視頻、攝像頭、視頻流
import cv2
# 打開(kāi)視頻文件
cap = cv2.VideoCapture('My 10 YEAR Indie Game Development Journey.mp4')
# 打開(kāi)攝像頭,參數(shù)是設(shè)備id
# cap = cv2.VideoCapture(0)
# 打開(kāi)視頻流,需要指定視頻流的 URL
# video = "http://admin:admin@192.168.1.3:8081/u"
# cap = cv2.VideoCapture(video)
while True:
# 讀取視頻的一幀,success表示是否成功,img是當(dāng)前幀的圖像
success, img = cap.read()
if success:
# 如果成功,顯示當(dāng)前幀
cv2.imshow('video', img)
# 每顯示一幀,檢查是否按下q鍵退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 完成后,釋放攝像頭/文件
cap.release()
繪圖
import cv2
import numpy as np
# 創(chuàng)建一個(gè)空的黑色圖像作為繪圖Canvas
img = np.zeros((512,512,3), np.uint8)
# 繪制圓形
# 圓心坐標(biāo)
center = (400,50)
# 半徑
radius = 30
# 線條顏色
color = (255,255,0)
# 線條寬度
thickness = 5
# 繪制空心圓
cv2.circle(img, center, radius, color, thickness)
# 繪制填充圓
cv2.circle(img,(450,80), 30, (0,255,255), cv2.FILLED)
# 繪制直線
# 起始點(diǎn)坐標(biāo)
p1 = (0,0)
# 結(jié)束點(diǎn)坐標(biāo)
p2 = (img.shape[1], img.shape[0])
# 線條顏色
color = (0,255,0)
# 線條寬度
thickness = 3
# 繪制直線
cv2.line(img, p1, p2, color, thickness)
# 繪制矩形
# 左上角坐標(biāo)
p1 = (0,0)
# 矩形大小(寬度,高度)
size = (250, 350)
# 線條顏色
color = (0,0,255)
# 線條寬度
thickness = 2
# 繪制空心矩形
cv2.rectangle(img, p1, size, color, thickness)
# 繪制填充矩形
cv2.rectangle(img, (100,100), (200,200), (255,0,0), cv2.FILLED)
# 顯示圖像
cv2.imshow('OpenCV', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
繪畫(huà)文字
import cv2
from PIL import ImageFont, ImageDraw, Image
import numpy as np
# Pillow模塊繪制中文
def paint_chinese_opencv(img, chinese, position, color, font_size=20):
# OpenCV圖片轉(zhuǎn)PIL圖片
img_PIL = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
# 加載字體
font = ImageFont.truetype('Noto Sans CJK Bold.otf', font_size, encoding="utf-8")
# 輸出的文字
draw = ImageDraw.Draw(img_PIL)
# 繪制文字
draw.text(position, chinese, color, font)
# draw.text(position, chinese, color)
# PIL圖片轉(zhuǎn)OpenCV圖片
img = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR)
return img
# OpenCV模塊繪制英文
img = np.zeros((512, 512, 3), np.uint8)
# 文字內(nèi)容
text = "OpenCV"
# 文字區(qū)域左上角坐標(biāo)
position = (300, 200)
# 加載字體
font = cv2.FONT_HERSHEY_COMPLEX
# 字號(hào)
font_size = 1
# 文字顏色 green
color = (0, 150, 0)
# 線條寬度
thickness = 3
# 繪制文字
cv2.putText(img, text, position, font, font_size, color, thickness)
# Pillow模塊繪制中文
text = "這是中文"
position = (300, 250)
color = (150, 0, 0)
img = paint_chinese_opencv(img, text, position, color)
cv2.imshow('Image', img)
cv2.waitKey(0)
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-696990.html
常見(jiàn)問(wèn)題:
libgtk2.0-dev and pkg-config庫(kù)找不到
The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-696990.html
pip install opencv-contrib-python
到了這里,關(guān)于Opencv快速入門(mén)教程,Python計(jì)算機(jī)視覺(jué)基礎(chǔ)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!