文章目录
opencv学习
Chapter0、安装
pip install opencv-python
安装成功
Chapter1、读取照片视频和摄像头——Read Images Videos and Webcams
(1)cv2.imread 读取照片并显示
import cv2
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片到img
cv2.imshow('Output', img) # 显示照片 ("名字", 要显示的照片)
cv2.waitKey(0) # 0=infinite delay;如果是1则是1milliseconds
(2)cv2.VideoCapture 读取视频并显示
import cv2
cap = cv2.VideoCapture(r'E:\Pictures\蝙蝠侠.mp4') # 选取视频路径
# we need a while loop to go through each frame one by one
while True: # 使用循环读取
success, img = cap.read() # 将cap的图片一个一个赋值给img
cv2.imshow("Video", img) # img显示出来
if cv2.waitKey(1) & 0xFF == ord('q'): # 当按下q结束循环
break
(3)cv2.VideoCapture 调用摄像头并显示实时视频
import cv2
cap = cv2.VideoCapture(0) # 写摄像头的ID, 默认为0
cap.set(3, 640) # 长(ID=3)=640
cap.set(4, 480) # 宽(ID=4)=480
cap.set(10, 100) # 改变亮度(ID=10)
# we need a while loop to go through each frame one by one
while True: # 使用循环读取
success, img = cap.read() # 将cap的图片一个一个赋值给img
cv2.imshow("Video", img) # img显示出来
if cv2.waitKey(1) & 0xFF == ord('q'): # 当按下q结束循环
break
Chapter2、基础函数——Basic Functions
(1)cv2.cvtColor-读取灰度图
import cv2
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片
# 在opencv中照片是BGR
# cvtColor=converts(转化) image into different color spaces
# BGR to GRAY
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("Gray Image", imgGray)
cv2.waitKey(0)
(2)cv2.GaussianBlur-blur增加模糊度
import cv2
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# (7, 7): kernal size(卷积):odd number
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
cv2.imshow("Gray Image", imgGray) # 原版:进行对比
cv2.imshow("Blur Image", imgBlur) # 模糊版
cv2.waitKey(0)
(3)cv2.Canny:edge detector-边缘探测
import cv2
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200) # 值越大边缘越模糊
cv2.imshow("Gray Image", imgGray) # 原版:进行对比
cv2.imshow("Blur Image", imgBlur) # 模糊版
cv2.imshow("Canny Image", imgCanny) # 识别边缘
cv2.waitKey(0)
imgCanny = cv2.Canny(img, 100, 100)
imgCanny = cv2.Canny(img, 150, 200) # 值越大边缘越模糊
(4)dialation(膨胀,扩张):cv2.dilate 增加边缘的厚度(用到numpy)-变厚!
numpy:a library that helps us deal with matrices
install first:
import cv2
import numpy as np
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片
# kernel:矩阵,定义大小和值
kernel = np.ones((5, 5), np.uint8) # 用numpy创建kernel:values=1
# 大小 类型:unsigned integer of 8-bit。values range from 0-255
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200)
# iterations叠代次数
# 在显示边缘的基础上扩大边缘
imgDialation = cv2.dilate(imgCanny, kernel, iterations=1)
cv2.imshow("Gray Image", imgGray) # 原版:进行对比
cv2.imshow("Blur Image", imgBlur) # 模糊版
cv2.imshow("Canny Image", imgCanny) # 边缘
cv2.imshow("Dialation Image", imgDialation) # 边缘膨胀扩大
cv2.waitKey(0)
imgDialation = cv2.dilate(imgCanny, kernel, iterations=1) # 叠代次数为1
imgDialation = cv2.dilate(imgCanny, kernel, iterations=5) # 叠代次数为5
(5)erosion(降低):cv2.erode-边缘变细!
import cv2
import numpy as np
img = cv2.imread(r'E:\Pictures\dir2\han2.png') # 读取照片
# kernel:矩阵,定义大小和值
kernel = np.ones((5, 5), np.uint8) # 用numpy创建kernel:values=1
# 大小 类型:unsigned integer of 8-bit。values range from 0-255
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
imgCanny = cv2.Canny(img, 150, 200)
imgDialation = cv2.dilate(imgCanny, kernel, iterations=1)
imgEroded = cv2.erode(imgDialation, kernel, iterations=1) # 变细
cv2.imshow("Gray Image", imgGray) # 原版:进行对比
cv2.imshow("Blur Image", imgBlur) # 模糊版
cv2.imshow("Canny Image", imgCanny) # 边缘
cv2.imshow("Dialation Image", imgDialation) # 边缘膨胀扩大
cv2.imshow("Eroded Image", imgEroded) # 边缘变细
cv2.waitKey(0)
Chapter3、调整大小和裁剪——RESIZING AND CROPPING
(0)问题!!
- 相同的代码为什么png不报错,jpg报错?!!
import cv2
import numpy as np
img = cv2.imread('./粉色.jpg')
cv2.imshow('Image', img)
cv2.waitKey(0)
(1)cv2.resize-改变图片大小
import cv2
import numpy as np
img = cv2.imread(r'E:\Pictures\dir2\han2.png')
# ↓返回shape来得知图片的大小:(900, 1600, 3)=(高,宽,ChannelNumber=3(BGR))
print(img.shape)
# ↓长 ↓高/宽
imgResize = cv2.resize(img, (500, 300)) # 改变大小
print(imgResize.shape)
cv2.imshow('Image', img)
cv2.imshow('Image Resize', imgResize)
cv2.waitKey(0)
(2)crop:imgCropped = img[, ]-剪裁
import cv2
import numpy as np
img = cv2.imread(r'E:\Pictures\dir2\han2.png')
print(img.shape)
# ↓长 ↓高/宽
imgResize = cv2.resize(img, (500, 300)) # 改变大小
print(imgResize.shape)
# ↓高/宽 ↓长
imgCropped = img[0:200, 200:500] # 裁剪
cv2.imshow('Image', img)
# cv2.imshow('Image Resize', imgResize)
cv2.imshow('Image Cropped', imgCropped)
cv2.waitKey(0)
2020.8.3 周日 上午更新
Chater4、形状和文本-SHAPES AND TEXTS
未学完!!
import cv2
import numpy as np
# 512*512pixels/boxes+,3=0-255
img = np.zeros((512, 512, 3), np.uint8)
# print(img)
# img[200:300, 100:300] = 255, 0, 0 # 蓝色
cv2.line(img, (0, 0), (img.shape[1], img.shape[0]), (0, 255, 0), 3)
cv2.rectangle(img, (0, 0), (250, 350), (0, 0, 255), 2) # 最后的2改成cv2.FILLED填充
cv2.circle(img, (400, 50), 30, (255, 255, 0), 5)
# ↓照片 ↓内容 ↓起始位置 ↓字体 ↓scale ↓颜色 ↓粗细
cv2.putText(img, "Esther", (300, 100), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 150, 0), 1)
cv2.imshow("Image", img)
cv2.waitKey(0)