opencv笔记(特别)——函数

函数

一、图像处理函数

图像基本处理

  • cv2.imshow(name,img)

     name:窗口名称 ;img :窗口内容
    
  • cv2.waitkey(timeout)

     显示图片时间timeout,单位为ms,0代表一直显示
     if cv2.waitKey(100) & 0xFF == 27:  # 27是esc键
         break
    
  • cv2.destoryAllWindows()

     关闭窗口
    
  • cv2.imread(filepath,flags)

     读取图片,默认是三通道(BGR)的彩色图,flags=0读入灰度图
    
  • cv2.imwrite(filename,img)

     保存图像,filename:文件名;img:内容
    
  • b,g,r=cv2.split(img)

     颜色通道提取,opencv提取格式为BGR(注意不是RBG)\
    
  • cv2.merge(b,g,r)

     重新组合颜色通道
    
  • cv2.copyMakeBorder(img,top, bottom, left, right,borderType)

     填充边界;img:内容;top, bottom, left, right:四区域的大小;borderType:填充种类
    
  • cv2.add(img1, img2)

     img1和img2的rgb值相加,超过255取255
    
  • cv2.addWeighted(img1,α,img2,β,b)

     为图片添加权重, 混合图像,img1=X1;img2=X2;αX1+βX2+b
    
  • cv2.resize(img, (width, height))

     变换图像大小(注意img.shape的出来的是(height,width))
    
  • cv2.resize(img, (0, 0), fx=a, fy=b)

     变换图像大小((height,width)为(0,0),a为x变为原来a倍,b为y变为原来b倍)
    
  • cv_show(‘name’, contents)

     name:窗口名称;contents:内容
    
  • cv2.VideoCapture(‘test.mp4’)

     cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。如果是视频文件,直接指定好路径即可。
    
  • vc.isOpened()

     oepn, frame = vc.read() #open是个bool值,true和false;frame是图像数组,如:img。
     vc.read()是一帧一帧的取,直到结束
    
    
  • cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

     gray = cv2.cvtColor(frame,  cv2.COLOR_BGR2GRAY)  # 转为灰度
    
  • vc.isOpened()

     oepn, frame = vc.read() #open是个bool值,true和false;frame是图像数组,如:img。
     vc.read()是一帧一帧的取,直到结束
    
  • cv2.split(img)

    b,g,r=cv2.split(img)
    切片b,g,r
    
  • cv2.merge((b,g,r))

    img=cv2.merge((b,g,r))  # 组合 b ,g ,r
    img.shape
    
  • cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)

    top_size,bottom_size,left_size,right_size = (50,50,50,50)
    BORDER_REPLICATE:复制法,也就是复制最边缘像素。
    BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
    BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
    BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
    BORDER_CONSTANT:常量法,常数值填充。
    
  • cv2.add(img_cat,img_cat2)[:5,:,0]

    array([[255, 255, 255, ..., 255, 255, 255],
       [226, 234, 246, ..., 255, 255, 255],
       [226, 230, 246, ..., 255, 255, 255],
       [255, 255, 255, ..., 255, 255, 255],
       [255, 255, 255, ..., 255, 255, 255]], dtype=uint8)
    
  • cv2.resize(img_dog, (500, 414))

    img_dog = cv2.resize(img_dog, (500, 414)) # w, h
    img_dog.shape
    (414, 500, 3)
    res = cv2.resize(img, (0, 0), fx=4, fy=4) # 指定倍数
    plt.imshow(res)
    
  • cv2.calcHist(images,channels,mask,histSize,ranges)

    显示直方图:
    images: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img]
    channels: 同样用中括号括来它会告函数我们统幅图 像的直方图。如果入图像是灰度图它的值就是 [0]如果是彩色图像 的传入的参数可以是 [0][1][2] 它们分别对应着 BGR。
    mask: 掩模图像。统整幅图像的直方图就把它为 None。但是如 果你想统图像某一分的直方图的你就制作一个掩模图像并 使用它。
    histSize:BIN 的数目。也应用中括号括来
    ranges: 像素值范围常为 [0-256]
    BINS :上面的直方图显示了每个像素值的像素数,即从0到255。即您需要256个值才能显示上述直方图。但是请考虑一下,如果您不需要单独查找所有像素值的像素数,而是在像素值间隔内查找像素数,该怎么办?例如,您需要找到介于 0 到 15 之间的像素数,然后是 16 到 31、...、240 到 255。您只需要 16 个值来表示直方图。 因此,只需将整个直方图拆分为 16 个子部分,每个子部分的值就是其中所有像素计数的总和。这每个子部分都称为"BIN"。在第一种情况下,条柱数为256(每个像素一个),而在第二种情况下,它只有16。BINS 在 OpenCV 文档中由术语histSize表示。
    plt.hist(img.ravel(),256);  # ravel()函数是把多维展开成一维
    
  • cv2.equalizeHist(img)

    直方图均衡化
    
  • cv2.bitwise_and(img, img, mask=mask)

    cv2.bitwise_and(img, img, mask=mask)#与操作
    
  • cv2.createCLAHE([, clipLimit[, tileGridSize]])

    cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) 
    clipLimit:颜色对比度的阈值,可选项,默认值 8
    titleGridSize:局部直方图均衡化的模板(邻域)大小,可选项,默认值 (8,8)
    
  • cv2.matchTemplate(img, template, cv2.TM_SQDIFF)

    TM_SQDIFF:计算平方不同,计算出来的值越小,越相关
    TM_CCORR:计算相关性,计算出来的值越大,越相关
    TM_CCOEFF:计算相关系数,计算出来的值越大,越相关
    TM_SQDIFF_NORMED:计算归一化平方不同,计算出来的值越接近0,越相关
    TM_CCORR_NORMED:计算归一化相关性,计算出来的值越接近1,越相关
    TM_CCOEFF_NORMED:计算归一化相关系数,计算出来的值越接近1,越相关
    methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR',
           'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']
    
  • cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None )

    img:指定一张图片,在这张图片的基础上进行绘制;(img相当于一个画板)
    pt1: 由(x_min,y_min)组成,为绘制的边框的左上角;
    pt2: 由(x_max, y_max)坐标,为绘制的边框的右下角,示意如下:
    color:指定边框的颜色,由(B,G,R)组成,当为(255,0,0)时为绿色,可以自由设定;
    thinkness:线条的粗细值,为正值时代表线条的粗细(以像素为单位),为负值时边框实心;
    

阈值与平滑处理

  • ret,det = cv2.threshold(src, thresh, maxval, type)

     ret:阈值;det:输出图
     src:原始图像;thresh:阈值,常见127(因为颜色为0-255);
     maxval:最大可能值(255);type:选择的功能或方法,即怎么判断阈值,二值化操作的类型
    
  • cv2.blur(img,ksize)

     均值滤波( 矩形中间的值=矩形内的值相加取平均值)
     img:图像;ksize:矩阵大小
    
  • cv2.boxFilter(img, ddepth,ksize, normalize=True)

     方框滤波: (normalize=True等同于均值滤波, normalize=false代表直接求和不取均值,越界后显示为255)**
     ddepth一般为-1表示得到的颜色通道和原图一致
    
  • cv2.GaussianBlur(img, ksize, sigmaX)

     高斯滤波:(离得近的权重高,离得远的权重低)
     sigmaX为高斯函数在X轴上的标准差σ,调整σ实际是在调整周围像素对当前像素的影响程度,
     调大σ即提高了远处像素对中心像素的影响程度,滤波结果也就越平滑
    
  • cv2.medianBlur(img,ksize)

     中值滤波:(矩形内的值排序后取中间值)
     ksize为矩阵大小,即ksize×ksize
    

图像形态学处理

  • numpy.ones(shape, dtype=None, order=‘C’)

     函数返回给定形状和数据类型的新数组,其中元素的值设置为1。
    
  • cv2.erode(img, kernel, iterations)

     腐蚀操作,iterations	施加腐蚀的次数。
    
  • cv2.dilate(img1, kernel, iterations)

     膨胀操作
    
  • cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

     开运算(先腐蚀再膨胀)
    
  • cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

     闭运算(先膨胀再腐蚀)
    
  • cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

     梯度运算(膨胀-腐蚀)
    
  • cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)

     顶帽运算(原始值-开运算), 突出更明亮的区域
    
  • cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)

     底帽运算(闭运算-原始值)
    

图像梯度处理

  • cv2.Sobel(img, ddepth, dx, dy,ksize)

     Sobel算子
     img:当前的图像;ddepth:图像的深度(一般为-1);dx和dy分别表示水平和竖直方向;ksize:Soble算子的大小
    
  • cv2.Scharr(img, ddepth, dx, dy)

     Scharr算子(能捕捉到更多的细节)
    
  • cv2.Laplacian(img, ddepth)

     Laplacian算子(噪点影响很大)
    
  • cv2.convertScaleAbs(sobelx)

     变为绝对值
    

边缘检测

  • cv2.Canny(img, threshold1, threshold2)

     边缘检测(threshold<value<threshold2,范围越大,边缘检测细节越多
    

图像金字塔与轮廓检测

  • cv2.pyrUp(img)

      高斯金字塔:向上采样(放大图像)
    
  • cv2.pyrDown(img)

     高斯金字塔:向下采样(缩小图像)
    
  • img-cv2.pyrUp(cv2.pyrDown(img))

     拉普拉斯金字塔(原图-(先缩小后放大))
    
  • cv2.findContours(img, mode, method)

     找出轮廓
     img:待测图像
     mode:轮廓检索模式
     method:轮廓逼近方法
    
  • cv2.drawContours(img, contours, contourIdx, color,width)

     画出轮廓
     contours:轮廓
     contourIdx:轮廓数量,画第几个轮廓;默认-1,即所有轮廓
     color:颜色(B,G,R)
     width:线条的宽度
    
  • cv2.contourArea(cnt)

     计算轮廓面积
    
  • cv2.arcLength(cnt, True)

     计算轮廓周长,True表示闭合
    
  • cv2.approxPolyDP(cnt, epsilon, True)

     轮廓近似(普朗克算法)
     cnt:具体哪个轮廓
     epsilon:给字节指定一个值来比较,一般按照周长的百分比设置
     True:闭合
    
  • x, y, w, h = cv2.boundingRect(cnt)

     (x, y)为坐标点,w, h为矩形长宽
    
  • cv2.rectangle(img, pt1, pt2, color,width)

     画矩形
     pt1:坐标点1
     pt2:坐标点2
     width:线宽
    
  • (x, y), radius = cv2.minEnclosingCircle(cnt)

     外接圆近似
    
  • cv2.circle(img, center, radius,color, width)

     画圆
    
  • res = cv2.matchTemplate(img, template, method)

     模板匹配
     method:匹配方法
    
  • min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

     min_val:算法算出的最小值
     max_val:算法算出的最大值
     min_loc:最小值所在的坐标(因为得到了h,w,所以可得到矩形)
     max_loc :最大值所在的坐标
    

直方图与傅里叶变换

  • cv2.calcHist(img, channels, mask, histSize, ranges)

     像素直方图统计:
     img:原图像格式为uint8或floart32。当传入函数时应用中括号[]来,例如[img]
     channels:同样用中括号,他会告诉我们统幅图像的直方图。如果入图像是灰度图它的值就是[0],如果是彩色图像
     		的传入的参数可以是[0][1][2],他们分别对应着BGR。
     mask:掩码图像。统整幅图像的直方图就把它为None。但是如果你想统图像某一分的直方图的,就制作一个掩码图
     		像并使用它。
     histSize:BIN的数目。也应用中括号括来
     ranges:像素值范围常为[0256]
    
  • cv2.bitwise_and(img, img, mask=mask)

     与操作
    
  • cv2.equalizeHist(img)

     直方图均衡化
    
  • cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))

     自适应直方图均衡化
     clipLimit:颜色对比度的阈值
      titleGridSize:进行像素均衡化的网格大小,即在多少网格下进行直方图的均衡化操作
    
  • cv2.dft(img, flags)

     执行傅里叶变换,flags:转换标识,通常为cv2.DFT_COMPLEX_OUTPUT,其他值如下
    
  • cv2.idft()

     傅里叶逆变换
    

二、其他函数

  • cv2.getStructuringElement(shape, size)

     shape:表示核的形状。可以选择三种
     	(1)矩形:MORPH_RECT
     	(2)交叉形:MORPH_CROSS;
     	(3)椭圆形:MORPH_ELLIPSE;
     size:表示核的尺寸。
    

三、OCR

(1)边缘检测
(2)获取轮廓
(3)变换
(4)OCR

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清园暖歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值