python进阶—OpenCV之常用图像操作函数说明

文章目录

  • cv2.threshold
  • cv2.bitwise_and
  • cv2.bitwise_or
  • cv2.bitwise_not
  • cv2.inRange
  • cv2.resize
  • cv2.adaptiveThreshold
  • cv2.warpAffine仿射
  • cv2.getRotationMatrix2D
  • cv2.warpPerspective投射
  • cv2.getAffineTransform
  • cv2.getPerspectiveTransform

经过近一个月的学习,发现对图像的一些基本操作函数还是理解的不够透彻,因此觉得把一些常用的图像操作函数拿出来加深理解并记录下很有必要,方便以后查询。

cv2.threshold

函数原型:threshold(src, thresh, maxval, type, dst=None)获取二值化图像;一般用于灰度图图像的二值化

  • 函数返回值:ret,dst;该函数有两个返回值,ret是用type为THRESH_OTSU或者THRESH_TRIANGLE方法计算出的阈值;dst是阈值化后的图像
  • src:输入的待二值化图像
  • thresh:阈值,可由参数指定;或者由type参数确定计算方法
  • maxval:像素最大取值
  • type:THRESH_BINARY、THRESH_BINARY_INV、THRESH_TOZERO、THRESH_TOZERO_INV、THRESH_TRUNC;另外THRESH_OTSU、THRESH_TRIANGLE为阈值计算方法,可与前5个进行|运算后赋值给type参数
  • THRESH_BINARY:像素值 < thresh,像素值取为0;像素值 > thresh,像素值取为maxval
  • THRESH_BINARY_INV:像素值 < thresh,像素值取为maxval;像素值 > thresh,像素值取为0
  • THRESH_TOZERO:像素值 < thresh,像素值取为0;像素值 > thresh,像素值保持不变
  • THRESH_TOZERO_INV:像素值 < thresh,像素值保持不变;像素值 > thresh,像素值取为0
  • THRESH_TRUNC:像素值 < thresh,像素值保持不变;像素值 > thresh,像素值取为maxval
  • THRESH_OTSU:用于具有(图像的像素直方图)双波峰的灰度图像的二值化
  • THRESH_TRIANGLE:用于具有(图像的像素直方图)单波峰的灰度图像的二值化

cv2.bitwise_and

函数原型:bitwise_and(src1, src2, dst=None, mask=None)

  • 函数返回值:调用时若无mask参数则返回src1 & src2,若存在mask参数,则返回src1 & src2 & mask
  • src1:输入原图1
  • src2:输入原图2,src1与src2可以相同也可以不相同,可以是灰度图像也可以是彩色图像
  • dst:若存在参数时:src1 & src2 或者 src1 & src2 & mask
  • mask:可以是单通道8bit灰度图像,也可以是矩阵,一般为二值化后的图像

cv2.bitwise_or

函数原型:bitwise_or(src1, src2, dst=None, mask=None)

  • 函数返回值:调用时若无mask参数则返回src1 | src2,若存在mask参数,则返回src1 | src2 | mask
  • src1:输入原图1
  • src2:输入原图2,src1与src2可以相同也可以不相同,可以是灰度图像也可以是彩色图像
  • dst:若存在参数时:src1 | src2 或者 src1 | src2 | mask
  • mask:可以是单通道8bit灰度图像,也可以是矩阵,一般为二值化后的图像

cv2.bitwise_not

函数原型:bitwise_not(src, dst=None, mask=None)

  • 函数返回值:调用时若无mask参数则返回按位取反回:~src1,若存在mask参数,则先做src1先做按位取反,然后按mask中bit=1的位取反
  • src1:输入原图1
  • dst:若存在参数时:与返回值相同
  • mask:可以是单通道8bit灰度图像,也可以是矩阵,一般为二值化后的图像

cv2.inRange

函数原型:inRange(src, lowerb, upperb, dst=None)

  • 函数返回值:二值图像
  • src:输入原图,可以为单通道灰度图像,也可以为3通道彩色图像
  • lowerb:像素值区间下限
  • upperb:像素值区间上限
  • dst:若存在参数,则与返回值相同
  • 说明:单通道灰度图像,像素值低于lowerb和高于upperb的部分变成0,lower_red~upper_red之间的值变成255;三通道彩色图像,则每个通道分别与lowerb、upperb比较,然后按照相同办法修改像素值

cv2.resize

函数原型:cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)

  • 函数返回值:变换大小后的图像
  • src:待变换输入原图,可以为单通道灰度图像,也可以为3通道彩色图像
  • dsize:变换后的图像尺寸,格式:宽通道;当dsize为0时,它可以通过以下公式计算得出:dsize = Size(round(fxsrc.cols), round(fysrc.rows))
    fx - 水平轴上的比例因子。当它为0时,计算公式如下:(double)(dsize.width/src.cols)
    fy - 垂直轴上的比例因子。当它为0时,计算公式如下:(double)(dsize.heifht/src.rows)
  • interpolation - 插值方法
  • interpolation取值:INTER_NEAREST - 最近邻插值法
  • interpolation取值:INTER_LINEAR - 双线性插值法(默认)
  • interpolation取值:INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。
  • interpolation取值:INTER_CUBIC - 基于4x4像素邻域的3次插值法
  • interpolation取值:INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos插值
  • 注意:参数dsize和参数(fx, fy)不能够同时为0

cv2.adaptiveThreshold

函数原型:cv2.adaptiveThreshold(src, maxval, thresh_type, type, blocksize, C),自适应阈值二值化

  • 函数返回:二值化后的图像
  • src:输入图像,只能是单通道灰度图像
  • maxval:当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值,与函数cv2.threshold相同
  • thresh_type: 阈值的计算方法,包含以下2种类型:cv2.ADAPTIVE_THRESH_MEAN_C; cv2.ADAPTIVE_THRESH_GAUSSIAN_C
  • type:二值化操作的类型,与固定阈值函数相同,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
  • blocksize: 图片中分块的大小
  • C:阈值计算方法中的常数项

cv2.warpAffine仿射

函数原型:cv2.warpAffine(src, M, dsize, dst, flags, borderMode, borderValue)

  • 函数返回:仿射变换后的图像
  • src:输入图像,可以为单通道或彩色图像
  • M:2*3仿射变换矩阵,矩阵格式[[1, 0, tx], [0, 1, ty]],也可由其它函数获取
  • dsize:输出图像的大小
  • dst:仿射变换后的输出图像
  • flags:插值方法,默认为 flags=cv2.INTER_LINEAR,表示线性插值,此外还有:cv2.INTER_NEAREST(最近邻插值) cv2.INTER_AREA (区域插值) cv2.INTER_CUBIC(三次样条插值) cv2.INTER_LANCZOS4(Lanczos插值)
  • borderMode:边界模式,可参照OpenCV第二篇的中的各种border模式
  • borderValue:边界像素大小
  • 一般在使用前三个参数

cv2.getRotationMatrix2D

函数原型:cv2.getRotationMatrix2D(center, angle, scale)

  • 返回值:返回一个2*3矩阵,主要用于cv2.warpAffine仿射变换
  • center:旋转中心坐标,是一个元组参数(col, row)
  • angle:旋转角度,旋转方向,逆时针
  • scale:方向比例
  • 此函数主要用于获得一个旋转矩阵

cv2.warpPerspective投射

函数原型:cv2.warpPerspective(src, M, dsize, dst, flags, borderMode, borderValue)

  • 函数返回:投射变换后的图像
  • src:输入图像,可以为单通道或彩色图像
  • M:3*3投射变换矩阵,可由函数cv2.getPerspectiveTransform获取
  • dsize:输出图像的大小
  • dst:仿射变换后的输出图像
  • flags:插值方法,默认为 flags=cv2.INTER_LINEAR,表示线性插值,此外还有:cv2.INTER_NEAREST(最近邻插值) cv2.INTER_AREA (区域插值) cv2.INTER_CUBIC(三次样条插值) cv2.INTER_LANCZOS4(Lanczos插值)
  • borderMode:边界模式,可参照OpenCV第二篇的中的各种border模式
  • borderValue:边界像素大小
  • 一般在使用前三个参数

cv2.getAffineTransform

函数原型:cv2.getAffineTransform(src, dst)

  • 返回值:仿射变换2*3 矩阵
  • src:仿射变换原图三角形的三个顶点坐标
  • dst:仿射变换输出图像三角形的三个顶点坐标

cv2.getPerspectiveTransform

函数原型:cv2.getPerspectiveTransform(src, dst)

  • 返回值:仿射变换3*3 矩阵
  • src:投射变换原图矩形的4个顶点坐标
  • dst:投射变换输出图像矩形的4个顶点坐标

好了,就先记录这几个,由于本篇主要用于总结函数的用途,以及参数的含义,并不涉及具体的数学知识,所以数学上的解释需要参考其他博客。以后若发现一些我不太记得住的函数,再继续添加。

(0)

相关推荐

  • Python|加权平均法读取灰度化图像介

    问题描述灰度化的原理时假定每个像素点的三通道值相同,并用统一的灰度值待代替.加权平均法读取灰度化图像时,是将三个通道的通道值进行加权,然后用来代替灰度.实际中加权平均法RGB灰度化的公式为: 式中表示 ...

  • [综述类] 一文道尽深度学习中的数据增强方法(上)

    00 什么是数据增强 在深度学习项目中,寻找数据花费了相当多的时间.但在很多实际的项目中,我们难以找到充足的数据来完成任务. 为了要保证完美地完成项目,有两件事情需要做好: 1.寻找更多的数据: 2. ...

  • 【从零学习OpenCV 4】图像膨胀

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】图像仿射变换

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 计算机视觉(五)双三次插值(Bicubic Interpolation)算法介绍及opencv和matlab的代码实现及区别

    超分辨率基础_插值算法简介 1.插值算法 数学的数值分析领域中,内插或称插值(英语:interpolation)是一种通过已知的.离散的数据点,在范围内推求新数据点的过程或方法.常见的三种插值算法为最 ...

  • 二值化处理与边缘检测

    问题:我在提取图像边缘的时候,首先对图像进行灰度变换,之后进行二值处理,最后进行边缘检测得到边缘图像. 但是在查阅资料的过程中我经常发现很多人忽略二值化的步骤,直接进行边缘检测:还有很多人在实现某些功 ...

  • 【从零学习OpenCV 4】两图像间的像素操作

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【OpenCV 4开发详解】图像腐蚀

     小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>. ...

  • 【从零学习OpenCV 4】中值滤波

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • (21条消息) OpenCV3学习(4.2)

    滤波处理分为两大类:线性滤波和非线性滤波.OpenCV里有这些滤波的函数,使用起来非常方便,现在简单介绍其使用方法. 线性滤波: 1.方框滤波:模糊图像 2.均值滤波:模糊图像 3.高斯滤波:信号的平 ...

  • Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略

    Py之cv2:cv2库(OpenCV,opencv-python)的简介.安装.使用方法(常见函数.方法等)最强详细攻略 相关文章: Py之cv2:cv2库(OpenCV)的简介.安装.使用方法(常见 ...

  • python+opencv图像处理(四十)

    Sobel算子  开头来张帅哥...... ----------------------这是严谨的分割线-------------------------- 1.Sobel算子(索贝尔算子) Sobe ...