常用opencv函数:
1、cv2.line():画线——参数依次为:图片路径,起点和终点坐标值,颜色(rgb),线条宽度(像素)
2、dst = cvtColor(src,code,dst=None,dstCn=None):颜色空间转换函数——参数依次为(原图像,color转化代码,输出图像,输出通道), 返回转换后的图像
3、ret, dst = cv2.threshold(src, thresh, maxval, type):固定阈值二值化——
src: 输入图,只能输入单通道图像,通常来说为灰度图
dst: 输出图
thresh: 阈值
maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
4、cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]]) :查找检测物体的轮廓
opencv2返回两个值:contours:hierarchy。注:opencv3会返回三个值,分别是img, countours, hierarchy
参数:
第一个参数是寻找轮廓的图像;
第二个参数表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口):
cv2.RETR_EXTERNAL 表示只检测外轮廓
cv2.RETR_LIST 检测的轮廓不建立等级关系
cv2.RETR_CCOMP 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
cv2.RETR_TREE 建立一个等级树结构的轮廓。
第三个参数method为轮廓的近似办法
cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
cv2.CHAIN_APPROX_SIMPLE 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS 使用teh-Chinl chain 近似算法
返回值
cv2.findContours()函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应的属性。
5、x,y,w,h = cv2.boundingRect(img):用一个最小的矩形,把找到的形状包起来
参数img是一个二值图;
返回四个值,分别是x,y,w,h;
x,y是矩阵左上点的坐标,w,h是矩阵的宽和高
6、edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]]) : 边缘检测
必要参数:
第一个参数是需要处理的原图像,该图像必须为单通道的灰度图;
第二个参数是阈值1;
第三个参数是阈值2。
其中较大的阈值2用于检测图像中明显的边缘,但一般情况下检测的效果不会那么完美,边缘检测出来是断断续续的。所以这时候用较小的第一个阈值用于将这些间断的边缘连接起来。
可选参数中apertureSize就是Sobel算子的大小。而L2gradient参数是一个布尔值,如果为真,则使用更精确的L2范数进行计算(即两个方向的倒数的平方和再开放),否则使用L1范数(直接将两个方向导数的绝对值相加)。
由于Canny只能处理灰度图,所以将读取的图像转成灰度图
7、cv2.getStructuringElement( ) :返回指定形状和尺寸的结构元素。
这个函数的第一个参数表示内核的形状,有三种形状可以选择。
矩形:MORPH_RECT;
交叉形:MORPH_CROSS;
椭圆形:MORPH_ELLIPSE;
第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得
getStructuringElement函数的返回值: 对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。element形状唯一依赖锚点位置,其他情况下,锚点只是影响了形态学运算结果的偏移。
8、cv2.morphologyEx(src, op, kernel) :进行各类形态学的变化
参数说明:
src传入的图片
op进行变化的方式
kernel表示方框的大小
op = cv2.MORPH_OPEN 进行开运算,指的是先进行腐蚀操作,再进行膨胀操作
op = cv2.MORPH_CLOSE 进行闭运算, 指的是先进行膨胀操作,再进行腐蚀操作
开运算:表示的是先进行腐蚀,再进行膨胀操作
闭运算:表示先进行膨胀操作,再进行腐蚀操作
9、cv2.contourArea(contour,oriented = False):此函数利用格林公式计算轮廓的面积。对于具有自交点的轮廓,该函数几乎肯定会给出错误的结果。
参数:
contour:输入二维的向量,存储为vector(C++)或Mat。
oriented:有方向的区域标志:
true:此函数依赖轮廓的方向(顺时针或逆时针)返回一个已标记区域的值。
false:默认值。意味着返回不带方向的绝对值。
10、cv2.fillPoly(img,ppt,npt,1,Scalar(255,255,255),lineType):绘制多边形并对其填充
函数参数:
img:多边形将被画到img上
ppt:多边形的顶点集为ppt
npt:绘制的多边形顶点数目为npt
要绘制的多边形数量为1
Scalar:多边形的颜色定义为Scarlar(255,255,255),即RGB的值为白色
lineType:线型
11、cv2.polylines():用于绘制任何图像上的多边形。
用法: cv2.polylines(image, [pts], isClosed, color, thickness)
参数:
image: 这是上圆要绘制的图像。
pts: 多边形曲行数组。
npts: 多边形顶点计数器阵列。
ncontours: 曲行数量。
isClosed: 指示绘制的折线是否闭合的标志。如果它们是闭合的,则该函数从每条曲线的最后一个顶点到其第一个顶点绘制一条线
color: 这是折线的颜色来绘制。对于BGR,我们传递一个元组。
thickness: 它是折线边的厚度。
返回值:它返回一个图像。
12、cv2.imwrite(file,img,num):保存一个图像。
参数:第一个参数是要保存的文件名,第二个参数是要保存的图像。可选的第三个参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别,默认为3。
注意:
cv2.IMWRITE_JPEG_QUALITY类型为 long ,必须转换成 int
cv2.IMWRITE_PNG_COMPRESSION, 从0到9 压缩级别越高图像越小
13、cv2.imread(filepath,flags) :读入图像。
参数:这幅图像应该在此程序的工作路径,或者给函数提供完整路径,第二个参数是要告诉函数应该如何读取这幅图片,可省略。
filepath:要读入图片的完整路径
flags:读入图片的标志
cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
cv2.IMREAD_GRAYSCALE:读入灰度图片
cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道
14、cv2.imshow(wname,img):显示图像
参数:第一个参数是显示图像的窗口的名字,第二个参数是要显示的图像(imread读入的图像),窗口大小自动调整为图片大小。
cv2.waitKey顾名思义等待键盘输入,单位为毫秒,即等待指定的毫秒数看是否有键盘输入,若在等待时间内按下任意键则返回按键的ASCII码,程序继续运行。若没有按下任何键,超时后返回-1。参数为0表示无限等待。不调用waitKey的话,窗口会一闪而逝,看不到显示的图片。
cv2.destroyAllWindow()销毁所有窗口
cv2.destroyWindow(wname)销毁指定窗口