Python-OpenCV
Python-OpenCV
安装
1 | pip install opencv-contrib-python |
基本操作
读取+显示图像
1 | import cv2 |
保存图像
1 | cv2.imwrite('*.jpg',image) |
获取属性
1 | print(image.shape) #(像素行数,像素列数,通道数) |
数字化基础
获取+修改像素BGR
1 | px=image[x,y] |
RGB/BGR转GRAY/HSV色彩空间
1 | image2=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) |
通道
1 | #拆分通道 |
NumPy数组类型
1 | import numpy |
数组转换方法
1 | numpy.int8(3.141)#3 |
创建数组
1 | n=numpy.array([1,2,3]) |
创建随机数组
1 | n=numpy.random.randint(1,3,10) #生成1*10随机数组 1~3 |
数组运算
1 | n1=numpy.array([1,2]) |
图像拼接
1 | #水平拼接 |
绘制
线段绘制
1 | canvas=numpy.zeros((300,300,3),numpy.uint8) |
矩形绘制
1 | canvas=cv2.rectangle(canvas,(50,50),(200,150),(255,255,0),20) |
绘制圆形
1 | canvas=cv2.circle(canvas,(50,50),40,(0,0,255),-1) |
绘制多边形
1 | pts=numpy.array([[100,50],[200,50],[250,250],[50,250]],numpy.int32) |
绘制文字
1 | """ |
阈值
阈值处理
1 | retval,dst=cv2.threshold(src,thresh,maxval,type) |
二值化
1 | if 像素值<=阈值: |
1 | t1,dst=cv2.threshold(img,127,255,cv2.THRESH_BINARY) |
反二值化
1 | if 像素值<=阈值: |
零处理
1 | if 像素值<=阈值: |
超出阈值零处理
1 | if 像素值<=阈值: |
截断处理
1 | if 像素<=阈值: |
自适应处理
1 | dst=cv2.adaptiveThreshold(src,maxValue,adaptiveMethod,thresholdType,blocksize,C) |
几何变换
缩放
1 | """ |
翻转
1 | dst=cv2.flip(img,0) #x轴翻转 |
仿射变换
1 | dst=cv2.warpAffine(src,M,dsize,flags,borderMode,borderValue) |
图像运算(掩模)
1 | #加法 |
滤波器
均值滤波器
1 | dst=cv2.blur(src,ksize,anchor,borderType) |
中值滤波器
1 | dst=cv2.medianBlur(src,ksize) |
高斯滤波器
1 | dst=cv2.GaussianBlur(src,ksize,sigmaX,sigmaY,borderType) |
双边滤波器
1 | dst=cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace,borderType) |
腐蚀&膨胀
腐蚀
1 | dst=cv2.erode(src,kernel,anchor,iterations,borderType,borderValue) |
膨胀
1 | dst=cv2.dilate(src,kernel,anchor,iterations,borderType,borderValue) |
开运算
先腐蚀后膨胀,用于抹除外部细节或噪声。
闭运算
先膨胀后腐蚀,用于抹除内部细节或噪声。
形态学方法
1 | dst=cv2.morphologyEx(src,op,kernel,anchor,iterations,borderType,borderValue) |
图像检测
图像轮廓
1 | contours,hierarchy=cv2.findContours(iamge,mode,methode) |
轮廓绘制
1 | image=cv2.drawContours(image,contours,controuIdx,color,thickness,lineTypee,hierarchy,maxLevel,offse) |
实例:绘制几何图形轮廓
1 | gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) |
轮廓拟合
矩形包围框
1 | x,y,w,h=cv2.boundingRect(array) |
圆形包围框
1 | center,radius=cv2.minEnclosingCircle(points) |
凸包
1 | hull=cv2.convexHull(points,clockwise,returnPoints) |
Canny边缘检测
1 | edge=cv2.Canny(image,threshold1,threshold2,apertureSize,L2gradient) |
霍夫变换
直线检测
1 | lines=cv2.HoughLinesP(image,rho,theta,threshold,minLineLength,maxLineGap) |
圆环检测
1 | circles=cv2.HoughCircles(image,method,dp,minDist,param1,param2,minRadius,maxRadius) |
模板匹配
模板匹配方法
1 | result=cv2.matchTemplate(image,templ,method,mask) |
单模板匹配
绘制红框
1 | minValue,maxValue,minLoc,maxLoc=cv2.minMaxLoc(src,mask) |
两幅中最佳匹配
1 | image=[] |
视频处理
摄像头
VideoCapture基础操作
1 | capture=cv2.VideoCapture(index) |
使用VideoCapture
1 | capture=cv2.VideoCapture(0,cv2.CAP_DSHOW) |
视频
播放视频
1 | video=cv2.VideoCapture("*.avi") |
获取属性
1 | retval=cv2.VideoCapture.get(propId) |
保存视频文件
1 | output=cv2.VideoWriter(filename,fourcc,fps,frameSize) |
人脸检测
1 | """ |
图像覆盖
1 | def overlay_img(img,img_over,img_over_x,img_over_y): |
人脸识别
Eigenfaces人脸识别器
1 | recognizer=cv2.face.EigenFaceRecognizer_create(num_components,threshold) |
Fisherfaces人脸识别器
1 | recognizer=cv2.face.FisherFaceRecognizer_create(num_components,threshold) |
LBPH(局部二值模式直方图)人脸识别器
1 | recognizer=cv2.face.LBPHFaceRecognizer_create(radius,neighbors,grid_x,grid_y,threshold) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 The Blog of Monoceros406!