OpenCV基础代码大全——原理与代码伴行详解

OpenCV学习笔记:

第一节课:

  • RGB颜色通道:所有彩图都是三颜色图
  • 0~255,亮度从黑色到白色
  • R:红, G:绿, B:蓝
  • 而对于一个灰度图,不需要RGB颜色通道
import cv2
import numpy as np
# numpy是一个数学运算库,可以自行搜索学习,一般与opencv搭配使用,有时还会用到matplotlib
  • 读取图像:
img = cv2:imread('路径', 参数)
# 两个参数:cv2.IMREAD_COLOR(彩图),cv2.IMREAD_GRAYSCALE(灰度图)
  • OpenCV默认读取格式为BGR
  • 显示图像:
cv2.imshow('名称(随便取)', img)
cv2.waitKey(参数)
# 参数为0时表示显示图像后,等待用户按下任意按键结束,参数为1到∞表示等待多少毫秒
cv2.destoryALLWindows()
# 搭配使用,关闭所有窗口
  • 获取图像的h,w,c值:
img.shape[参数]
# [0]表示h,[1]表示w,[2]表示通道数c
  • 保存:
cv2.imwrite('路径+名称:如./picture/img.jpg:',img)
  • 打开视频:
vc = cv2.VideoCapture(参数)
# 参数为0时打开电脑自带摄像头,为视频路径时打开视频

第二节课:

  • 视频转换为灰度视频:
vc = cv2.VideoCapture(参数)
if vc.isOpend():
    ret, frame = vc.read()
    # ret判断视频是否打开成功,frame表示读到的一帧图片
else:
    ret = False

while ret:
    ret, frame = vc.read()
    # ret判断视频是否打开成功
    if frame is None:
        break
    # 视频读完,退出
    if ret = True:
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 灰度转换,参数cv2.COLOR_BGR2GRAY表示将bgr转换为灰度
        cv2.imshow('result', gray)
        if cv2.waitKey(10) & OxFF == 27:
            break

vc.release()
cv2.destoryALLWindows()

第三节课:

  • 截取部分图像:
img = cv2.imread()
cut = img[a:b, c:d]
# 从坐标横坐标a:b,纵坐标c:d截取图像
cv2.imshow('cut', cut)
  • 颜色通道提取与合并:
b,g,r = cv2.split(img)
img = cv2.merge(b,g,r)
  • 分别取BGR:
cur_img = img.copy()
cur_img[:,:,0] = 0 #B = 0
cur_img[:,:,1] = 0 #G = 0
cv2.imshow('R', cur_img)

第四节课:

  • 边界填充:
(top_size, bottom_size, left_size, right_size) = (a,b,c,d)
replace = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.方式)
# 方式:复制法,反射法,反射对称,外包装法,常量法
  • 数值计算:
img = img + n 
# 在每个像素点上加n,但shape值不变
img1 + img2 
# 两张图片对应相加,超过255值就取余
cv2.add(img1, img2)
# 超过255就取255
  • 改变shape值:
img = cv2.resize(img, (x, y))
img = cv2.resize(img, (0,0), fx = a, fy = b)
# 改变倍数

第五节课:

  • 图像阈值:
ret, dst = cv2.threshoid(src, thresh, maxval, type)
# src:输入图,只能输入单通道图像,通常为灰度图
# dst:输出图
# thresh:阈值
# maxval:当像素值超过了阈值(或者小于阈值,依type定),所赋予的值
# type:二值化操作类型,五种
# 例:ret, dst = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)

第六,七节课:

  • 图像平滑:
# 均值滤波
blur = cv2.blur(img, (x, x))
# 方框滤波
box = cv2.boxFilter(img, -1, (x,x), normalize = Ture) #或者(normalize去掉)
# 高斯滤波
gaussian = cv2.GaussianBlur(img, (x,x), 1)
# 中值滤波
median = cv2.medianBlur(img, x)
# 展示所有
res = np.hstack(vstaack)(blur,gaussian,median)
cv2.imshow('all', res)
cv2.waitKey(0)
cv2.destoryALLWindow()

第八节课:

  • 形态学腐蚀操作:
kernel = np.ones((x,x), np.uint8)
# 设置腐蚀算子,x一般取3,5,7,9等奇数
erosion = cv2.erode(img, kernel, iterations = y)
# y为腐蚀次数
cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destoryALLWindow()

第九节课:

  • 形态学膨胀操作:
kernel = np,ones((x,x), np.unit8)
# 设置膨胀算子
dilate = cv2.dilate(img, kernel, iterations = y)
# y为膨胀次数
cv2.imshow('dilate', dilate)
cv2.waitKey(0)
cv2.destoryALLWindow()

第十节课:

  • 开运算与闭运算:
  • 开运算:
# 先腐蚀,再膨胀
kernel = np,ones((x,x), np.unit8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
# 参数MORPH_OPEN决定开运算
  • 闭运算:
# 先膨胀,再腐蚀
kernel = np,ones((x,x), np.unit8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
# 参数MORPH_CLOSE决定闭运算

第十一节课:

  • 梯度运算:
# 膨胀-腐蚀
kernel = np,ones((x,x), np.unit8)
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
# 参数MORPH_GRADIENT决定梯度运算
cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destoryALLWindow()

第十二节课:

  • 礼帽(末节):
# 原始输入减去开运算结果,相当于只保留了图像的细枝末节
kernel = np,ones((x,x), np.unit8)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
# 参数MORPH_TOPHAT决定礼帽运算
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destoryALLWindow()
  • 黑帽(轮廓):
# 闭运算结果减去原始输入,相当于保留了图像的轮廓信息
kernel = np,ones((x,x), np.unit8)
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
# 参数MORPH_TOPHAT决定了黑帽运算
cv2.imshow('', blackhat)
cv2.waitKey(0)
cv2.destoryALLWindow()

你可能感兴趣的:(opencv,计算机视觉,python)