Opencv入门使用
学习国外视频之后手打的教程,若有不对的地方请留言==
1.显示图片
import cv2
img = cv2.imread("./resources/KS.jpg")
//窗口名称, 图片对象
cv2.imshow('Output', img)
//图片永久停留, n*1000: 停留n秒后消失
cv2.waitKey(0)
效果
2.显示视频
cap = cv2.VideoCapture("./resources/twilight.mp4")
#设置循环,读取视频=读取每一帧图片
while True:
success, img = cap.read()
cv2.imshow("Video", img)
//视频持续播放,如果按s键(设定的字母用小写),视频关闭
if cv2.waitKey(1) & 0xFF == ord('s'):
break
效果
3.启用摄像头
//0表示使用的摄像头,有1个摄像头就填入0
cap = cv2.VideoCapture(0)
//3代表宽度项,640为设置的宽度值
cap.set(3, 640)
//4代表高度项,480为设置的高度值
cap.set(4, 480)
//10代表亮度项, 100为设置的亮度
cap.set(10, 100)
while True:
success, img = cap.read()
cv2.imshow("Video", img)
//摄像头持续开着,如果按s键(设定的字母用小写),摄像头关闭
if cv2.waitKey(1) & 0xFF == ord('s'):
break
效果
我就不露镜了
4.原图–>灰度图
img = cv2.imread("resources/KS.jpg")
//使用cvtColor功能,把彩图img的通道BGR转到GRAY(opencv中彩图通道顺序是BGR)
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
//窗口名称,显示的图片
cv2.imshow('Gray Image', imgGray)
cv2.waitKey(0)
效果
5.原图–>灰度图–>高斯模糊图
img = cv2.imread("resources/KS.jpg")
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
//(blur1,blur2)是高斯核的大小,选取一般是奇数,模糊度和数字大小成正比
//进行滤波的图像的长宽比如果为1:1,那么选取blur时,一般设置blur1=blur2
//如果要进行滤波的图像的长宽比大致为m:n,那么选取blur时,尽量是blur1:blur2=m:n
//sigmaX – X方向上的高斯核标准偏差
imgBlur = cv2.GaussianBlur(imgGray, (3, 5), sigmaX=0)
cv2.imshow('Blur Image', imgBlur)
cv2.waitKey(0)
效果
6.原图–>边缘图
img = cv2.imread("resources/KS.jpg")
//两个阈值越大,轮廓线条越少
imgCanny = cv2.Canny(img, 200, 250)
cv2.imshow('Canny Image', imgCanny)
cv2.waitKey(0)
效果
7.原图–>边缘图–>膨胀图
img = cv2.imread("resources/KS.jpg")
imgCanny = cv2.Canny(img, 200, 250)
//kernel是滑动窗口,在图像上进行从左到右,从上到下的平移,如果方框中存在白色,那么这个方框内所有的颜色都是白色
//uint8,表示变量是无符号整数,范围是0到255
//uint8是指0~2^8-1 = 255数据类型
kernel = np.ones((3, 3), np.uint8)
//iteration表示迭代的次数
imgDilation = cv2.dilate(imgCanny, kernel, iterations=1)
cv2.imshow('Dilation Image', imgDilation)
cv2.waitKey(0)
效果
8.原图–>边缘图–>膨胀图–>腐蚀图
img = cv2.imread("resources/KS.jpg")
imgCanny = cv2.Canny(img, 200, 250)
kernel = np.ones((3, 3), np.uint8)
imgDilation = cv2.dilate(imgCanny, kernel, iterations=1)
imgEroded = cv2.erode(imgDilation, kernel, iterations=1)
cv2.imshow('Eroded Image', imgEroded)
cv2.waitKey(0)
效果
9.图像尺寸变换
//(430, 690, 3) (h, w, 3)原始图像尺寸
img = cv2.imread("resources/car.png")
//opencv图像的起始坐标在左上角
//使用opencv变换时,输入的是(w, h) !!!
imgResize = cv2.resize(img, (350, 200))
cv2.imshow('Image', img)
cv2.imshow('Image Resize', imgResize)
cv2.waitKey(0)
效果
10.图片裁剪
img = cv2.imread("resources/car.png")
// (430, 690, 3) (h, w, 3)
print(img.shape)
// 正常裁剪,输入的是(h, w) !!!
imgCropped = img[50:350, 200:500]
cv2.imshow("Image", img)
cv2.imshow("Image Cropped", imgCropped)
cv2.waitKey(0)
效果
11.图片颜色变换
//创建一张全零的图片,每个像素的值范围是[0, 255]
img = np.zeros((512, 512, 3), np.uint8)
//设置每个像素的三通道值为255,0,0 (B R G)
img[:] = 255, 0, 0
cv2.imshow("Image", img)
cv2.waitKey(0)
效果
12.图片上加线条
//这是一张全黑图片,像素值0代表black
img = np.zeros((512, 512, 3), np.uint8)
//设置被覆盖的图片,线的起点(w, h),终点(w, h) !!!,颜色,宽度
cv2.line(img, (0, 0), (300, 300), (0, 255, 0), thickness=3)
cv2.imshow("Image", img)
cv2.waitKey(0)
效果
13.图片上加矩形框
img = np.zeros((512, 512, 3), np.uin