matplotlib中文显示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
pip install opencv-python==3.4.2.17
pip install opencv-contrib-python==3.4.2.17
#国内清华镜像
-i https://pypi.tuna.tsinghua.edu.cn/simple
# 设置清华镜像
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn
import cv2
# 读一个图片并进行显示(图片路径需自己指定)
img=cv2.imread("1.jpg")
cv2.imshow("image",img)
cv2.waitKey(0)
# 保存图片
cv.imwrite('messigray.png',img)
# 绘制直线
# 绘制直线
cv.line()
# 绘制直线
cv.circle()
# 绘制直线
cv.rectangle()
# 向图像中增加文字
cv.putText()
# 图像加法
cv.add()
#2 图像混合
cv.addWeighted()
#1 图像缩放
cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)
#2 图像平移
cv.warpAffine(img,M,dsize)
#3 图像旋转
cv2.getRotationMatrix2D(center, angle, scale) -> cv.warpAffine(img,M,dsize)
#4 仿射变换
cv2.getAffineTransform() -> cv.warpAffine(img,M,dsize)
#5 透射变换
cv.getPerspectiveTransform() -> cv.warpAffine(img,M,dsize)
#6 图像金字塔
cv.pyrUp(img) #对图像进行上采样
cv.pyrDown(img) #对图像进行下采样
# 腐蚀
cv.erode(img,kernel,iterations)
# 膨胀
cv.dilate(img,kernel,iterations)
# 开运算 闭运算
cv.morphologyEx(img, op, kernel) # op: 处理方式:若进行开运算,则设为cv.MORPH_OPEN,若进行闭运算,则设为cv.MORPH_CLOSE
# 礼帽和黑帽
cv.morphologyEx(img, op, kernel)# op: 处理方式:若进行开运算,则设为cv.MORPH_TOPHAT,若进行闭运算,则设为cv.BLACKHAT
#均值滤波
cv.blur(src, ksize, anchor, borderType)
#高斯滤波
cv2.GaussianBlur(src,ksize,sigmaX,sigmay,borderType)
#中值滤波
cv.medianBlur(src, ksize)
# mask -> 直方图
cv2.calcHist(images,channels,mask,histSize,ranges[,hist[,accumulate]])
'''
images: 原图像。当传入函数时应该用中括号 [] 括起来,例如:[img]。
channels: 如果输入图像是灰度图,它的值就是 [0];如果是彩色图像的话,传入的参数可以是 [0],[1],[2] 它们分别对应着通道 B,G,R。
mask: 掩模图像。要统计整幅图像的直方图就把它设为 None。但是如果你想统计图像某一部分的直方图的话,你就需要制作一个掩模图像,并使用它。(后边有例子)
histSize:BIN 的数目。也应该用中括号括起来,例如:[256]。
ranges: 像素值范围,通常为 [0,256]
'''
# 掩模
mask -> cv.bitwise_and
# 直方图均衡化
dst = cv.equalizeHist(img)
#自适应的直方图均衡化
cv.createCLAHE(clipLimit, tileGridSize)
'''
clipLimit: 对比度限制,默认是40
tileGridSize: 分块的大小,默认为8*88∗8
'''
#sobel边缘检测
Sobel_x_or_y = cv2.Sobel(src, ddepth, dx, dy, dst, ksize, scale, delta, borderType)
'''
src:传入的图像
ddepth: 图像的深度
dx和dy: 指求导的阶数,0表示这个方向上没有求导,取值为0、1。
ksize: 是Sobel算子的大小,即卷积核的大小,必须为奇数1、3、5、7,默认为3。
注意:如果ksize=-1,就演变成为3x3的Scharr算子。
scale:缩放导数的比例常数,默认情况为没有伸缩系数。
borderType:图像边界的模式,默认值为cv2.BORDER_DEFAULT。
'''
# Laplacian算子
laplacian = cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])
'''
Src: 需要处理的图像,
Ddepth: 图像的深度,-1表示采用的是原图像相同的深度,目标图像的深度必须大于等于原图像的深度;
ksize:算子的大小,即卷积核的大小,必须为1,3,5,7。
'''
# Canny边缘检测
canny = cv2.Canny(image, threshold1, threshold2)
'''
image:灰度图,
threshold1: minval,较小的阈值将间断的边缘连接起来
threshold2: maxval,较大的阈值检测图像中明显的边缘
'''
# 模板匹配
res = cv.matchTemplate(img,template,method)
'''
img: 要进行模板匹配的图像
Template :模板
method:实现模板匹配的算法,主要有:
平方差匹配(CV_TM_SQDIFF):利用模板与图像之间的平方差进行匹配,最好的匹配是0,匹配越差,匹配的值越大。
相关匹配(CV_TM_CCORR):利用模板与图像间的乘法进行匹配,数值越大表示匹配程度较高,越小表示匹配效果差。
利用相关系数匹配(CV_TM_CCOEFF):利用模板与图像间的相关系数匹配,1表示完美的匹配,-1表示最差的匹配。
'''
#霍夫线检测
# 1 线性检测
cv.HoughLines(img, rho, theta, threshold)
# 2 圆环检测
circles = cv.HoughCircles(image, method, dp, minDist, param1=100, param2=100, minRadius=0,maxRadius=0 )
# 变换
dft = cv2.dft(src, dst=None)
# 逆变换
img = cv.idft(dft)
# 查找轮廓
binary, contours, hierarchy = cv2.findContours(img, mode, method)
# 绘制轮廓
cv2.drawContours(img, contours, index, color, width)
'''
面积:ContourArea()
周长:ArcLength()
轮廓近似:approxPolyDP() 逼近图像的多边形曲线
凸包:ConvexHull()
边界矩形:BoundingRect()和MinAreaRect()
最小外接圆:MinEnclosingCircle()
椭圆拟合:fitEllipse()
直线拟合:fitline()
'''
全域值分割
ret,th = threshold(src, thresh, maxval, type)
dst = cv.adaptiveThreshold(src, maxval, thresh_type, type, Block Size, C)
src: 输入图像,一般是灰度图
Maxval:灰度中的最大值,一般为255,用来指明像素超过或小于阈值(与type类型有关),赋予的最大值
thresh_type : 阈值的计算方法,主要有以下两种: cv2.ADAPTIVE_THRESH_MEAN_C:邻域内像素值取均值
cv2.ADAPTIVE_THRESH_GAUSSIAN_C:邻域内像素值进行高斯核加权求和
type: 阈值方式,与threshold中的type意义相同
block_size: 计算局部阈值时取邻域的大小,如果设为11,就取11*11的邻域范围,一般为奇数。
C: 阈值计算方法中的常数项,即最终的阈值是邻域内计算出的阈值与该常数项的差值
全域值分割
res = watershed(image,markers)
GrabCut算法
grabCut(img,mask,rect,bgdModel,fgdModel,iterCount,mode )
#Harris角点检测
dst=cv.cornerHarris(src, blockSize, ksize, k)
#Shi-Tomasi角点检测
corners = cv2.goodFeaturesToTrack ( image, maxcorners, qualityLevel, minDistance )
# 实例化sift
sift = cv.xfeatures2d.SIFT_create()
# 利用sift.detectAndCompute()检测关键点并计算
kp,des = sift.detectAndCompute(gray,None)
#将关键点检测结果绘制在图像上
cv.drawKeypoints(image, keypoints, outputimage, color, flags)
读取视频:
保存视频
# Meanshift
cv.meanShift(probImage, window, criteria)
ret, track_window = cv.CamShift(dst, track_window, term_crit)
# 绘制追踪结果
pts = cv.boxPoints(ret)
pts = np.int0(pts)
img2 = cv.polylines(frame,[pts],True, 255,2)
参考文档 OpenCV官方教程