常用的Opencv函数汇总(持续更新...)

文章目录

        • 0. 安装
        • 1. cv.read()、cv.imwrite()
        • 2. cv2.findContours、cv2.drawContours函数
        • 3. cv2.copyMakeBorder函数
        • 4.cv2.createThinPlateSplineShapeTransformer()
        • 5.cv2.copyTo()
        • 6.cv2.circle/cv2.putText()
        • 7.cv2.Laplacian()
        • 8.cv2.resize()
        • 9.cv2.add/addWeighted()
        • 10.cv2.seamlessClone()
        • 11.cv2.GaussianBlur()、cv2.filter2D()
        • 12.cv2.getRotationMatrix2D()、cv2.warpAffine()
        • 13.放射变换、透视变换、tps插值
        • 14.cv2.minAreaRect、cv2.boxPoints
        • 15.meanStdDev
        • 16.contourArea、arcLength、approxPolyDP
        • 17.cv2.inpaint()
        • 18.cv2.VideoCapture()

0. 安装

  1. c++安装
  • 参考:opencv3.2 和opencv2.4同时安装(亲测有效)
  1. python安装
pip install opencv-contrib-python==3.4.3.18

1. cv.read()、cv.imwrite()

  • 作用:读取/写入图片(注意:读取的通道为BGR)
  • 参考:写入图片的三种形式(PIL/CV2/Scipy)
  • 使用:
#读取图片
img_path = "img.jpg"
img = cv.imread(img_path)	#BGR
#写入图片
cv.imwrite("img.png", img) 

注,在读取操作时,PIL的Image.open函数读取的通道为RGB,速度比cv.read快。

2. cv2.findContours、cv2.drawContours函数

  • 作用:图像的轮廓检测、图像的轮廓绘制
  • 参考
  • 使用:
import cv2  
  
img = cv2.imread('test.jpg')  
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  	#转灰度图
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)  
  
contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)  #找出轮廓点
cv2.drawContours(img,contours,-1,(0,0,255),3)  #绘制轮廓
  
cv2.imshow("img", img)  
cv2.waitKey(0)  

注,opencv2和opencv3的版本不同,findContours的输出会有不同,稍微注意一下

3. cv2.copyMakeBorder函数

  • 作用:扩展图像边界
  • 参考:Opencv-Python学习笔记——边界增加copyMakeBorder

4.cv2.createThinPlateSplineShapeTransformer()

  • 作用:将图片按给定要求标准化
  • 参考:薄板样条插值(Thin plate splines)的实现与使用

5.cv2.copyTo()

  • 作用:对图片进行抠图操作(根据mask去原图截)
  • 参考:1. 详解掩膜mask(C++版)、copyTo(python版)

6.cv2.circle/cv2.putText()

  • 作用:在指定位置做圆
  • 使用:
#cv2.circle
#2个参数为圆心位置, 3个参数为半径,4个参数为颜色
cv2.circle(img, (int(coords[0]),int(coords[1])), 3, (0,0,255), -1)

#cv2.putText()
#2个参数为要写的文字, 3个参数为位置,4个参数为字体,
for i in range(len(edge_points)):
	cv2.putText(img, str(i), (int(edge_points[i][0]),int(edge_points[i][1])), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2)

7.cv2.Laplacian()

  • 作用:计算图片的模糊程度
  • 参考:图像的模糊检测方法

8.cv2.resize()

  • 作用:改变图片大小
  • 参考:图片放缩

9.cv2.add/addWeighted()

  • 作用:将两张图片融合(size要求一致)
  • 参考:OpenCV-Python图片叠加与融合,cv2.add与cv2.addWeighted的区别
    注:图片上下左右连接参考:Python 图片连接(不重叠):

10.cv2.seamlessClone()

  • 作用:图片无缝融合(不要求size一致)
  • 参考:opencv实现无缝融合–seamless clone

11.cv2.GaussianBlur()、cv2.filter2D()

  • 作用:模糊图片细节(高斯模糊)、动态模糊
  • 参考:https://blog.csdn.net/dcrmg/article/details/82317181

12.cv2.getRotationMatrix2D()、cv2.warpAffine()

  • 作用:用于旋转图片固定角度
  • 参考:图片旋转
    注:cv2的旋转是不保边的,保边旋转可以使用imutils.rotate_bound(参考)

13.放射变换、透视变换、tps插值

参考:Thin Plate Spline (薄板样条函数)(TPS)
参考:刚性变换、仿射变换、透视变换和非线形变换
参考:图像处理的仿射变换与透视变换

放射变换(线性变换)是2维空间,给定3个点,可以映射;只能是刚性变换,比如平移,翻转,裁剪;
透视变换(线性变换)是3维空间,给定4个点,可以映射;
tps插值的话是非刚性形变,相对自然,可以输入多个点,去插值;比如给定原始形状的有限点集A,变形后的对应目标点集B,设C=B-A,对(Ax,Ay, Cx)拟合出一个TPS,就可以得到x方向的内插函数;对(Ax,Ay, Cy)拟合出来的TPS则可以得到y方向的内插函数。这样一以来对于不在点集中的点,我们就可以插值得到目标点。从而完成整个面的变形。

14.cv2.minAreaRect、cv2.boxPoints

  • 作用:获取点集的最小外接矩形、获取最小外接矩定点坐标
  • 参考:minAreaRect 、boxPoints

15.meanStdDev

  • 作用:获取图片部分区域的均值和均方差
  • 参考:meanStdDev使用
    注:可以计算不规则区域的均值与方差,mean, var = cv2.meanStdDev(img, mask = mask)

16.contourArea、arcLength、approxPolyDP

  • 作用:计算轮廓面积、周长、获得轮廓近似
  • 参考:approxPolyDP

17.cv2.inpaint()

  • 作用:图像修复,用于去水印、logo等
  • 参考:图片去水印或文字及打马赛克

18.cv2.VideoCapture()

  • 作用:获得视频的一些基本信息
  • 参考:VideoCapture.get()参数详解

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