机器学习之cv2函数方法大全-计算机视觉

Posted 杨治中

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习之cv2函数方法大全-计算机视觉相关的知识,希望对你有一定的参考价值。

zephyr_wang

于 2020-07-31 11:24:18 发布

3338
 收藏 51
分类专栏: 图像处理 python
版权

图像处理
同时被 2 个专栏收录
30 篇文章2 订阅
订阅专栏

python
21 篇文章0 订阅
订阅专栏
目录
1 cv2.imread(): 1
2 cv2.imshow()显示图像 1
3 cv2.imwrite(file,img,num): 1
4 Img基本属性 1
5 图片颜色通道的分离与合并 1
6 图片相加、加减乘除、均值&方差、逻辑运算——与、或、非、异或 1
7 cv2.flip(img,flipcode)翻转图像 2
8 cv2.resize()缩放等几何变换 3
9 形态学转换 3
10 绘制线段,圆,矩形和多边形等 3
11 cvtColor颜色空间转换 3
12 二值化 4
13 色调,明暗,直方图和Gamma曲线 4
14 均值模糊、中值模糊,高斯模糊,双边模糊 5
15 图像梯度 5
16 角点检测 6
17 视频功能 6
18 光流 7
19 机器学习 7

1 cv2.imread():
读入图片,共两个参数,第一个参数为要读入的图片文件名,第二个参数为如何读取图片

2 cv2.imshow()显示图像
3 cv2.imwrite(file,img,num):
保存图片,共3个参数,第一个为保存文件名,第二个为读入图片,可选的第三个参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3.。

4 Img基本属性
• img.shape:打印图片的高、宽和通道数(当图片为灰度图像时,颜色通道数为1,不显示)
• img.size:打印图片的像素数目
• img.dtype:打印图片的格式

5 图片颜色通道的分离与合并
• cv2.split(m):将图片m分离为三个颜色通道
• cv2.merge(mv):将三个颜色通道合并为一张图片

6 图片相加、加减乘除、均值&方差、逻辑运算——与、或、非、异或
• cv2.add(src1, src2):普通相加
• cv2.addWeighted(src1, alpha, src2, w2,beta):带权相加
src1:第一张图片
alpha:第一张图片权重
src2:第二张图片
beta:第二张图片权重
gamma:图1与图2作和后添加的数值。
dst:输出图片

def subtract_demo(m1, m2):
• dst = cv2.subtract(m1, m2)
• cv2.imshow(“subtract”, dst)

• def multiply_demo(m1, m2):
• dst = cv2.multiply(m1, m2)
• cv2.imshow(“multiply”, dst)

• def divide_demo(m1, m2):
• dst = cv2.divide(m1, m2)

• # 均值
• M1 = cv2.mean(img)
• print(M1)
• # 均值和方差
• M1, dev1 = cv2.meanStdDev(img)

• 其中非运算就是对图像进行颜色反转
• def logic_demo(m1, m2):
• dst = cv2.bitwise_and(m1, m2)
• cv2.imshow(“bitwise_and”, dst)
• dst = cv2.bitwise_or(m1, m2)
• cv2.imshow(“bitwise_or”, dst)
• dst = cv2.bitwise_not(m1, m2)
• cv2.imshow(“bitwise_not”, dst)
• dst = cv2.bitwise_xor(m1, m2)

7 cv2.flip(img,flipcode)翻转图像
flipcode控制翻转效果。
flipcode = 0:沿x轴翻转
flipcode > 0:沿y轴翻转
flipcode < 0:x,y轴同时翻转
imgflip = cv2.flip(img,1)

8 cv2.resize()缩放等几何变换
扩展缩放 cv2.resize(src,dsize[,dst[,fx[,fy[,interpolation]]]]) → dst
仿射变换 cv2.getAffineTransform(src,dst) → retval
cv2.warpAffine(src,M,dsize[,dst[,flags[,borderMode[,borderValue]]]]) → dst
旋转 cv2.getRotationMatrix2D(center,angle,scale)→ret
透视变换 cv2.getPerspectiveTransform(src,dst) → retval
cv2.warpPerspective(src,M,dsize[,dst[,flags[,borderMod[,borderValue]]]]) → dst

9 形态学转换
腐蚀 cv2.erode(src,kernel[,dst[,anchor[,iterations[,borderType[,borderType]]]]]) → dst
膨胀 cv2.dilate(src,kernel[,dst[,anchor[,iterations[,borderType[,borderType]]]]]) → dst

10 绘制线段,圆,矩形和多边形等
画圆 cv2.circle(img,center,radius,color[,thickness[,lineType[,shift]]]) → None
画矩阵 cv2.rectangle(img,pt1,pt2,color[,thickness[,lineType[,shift]]]) → None
画线段 cv2.Line(img,pt1,pt2,color[,thickness[,lineType[,shift]]]) → None
画折线 cv2.polyLines(img,pts,isClosed,color[,thickness[,linrType[,shift]]]) → None
剪切矩形内部的直线 cv2.clipLine(imgRect,pt1,pt2) → retval,pt1,pt2
画椭圆 cv2.ellipse(img,center,axes,angle,startAngle,endAngle,color[,thickness[,lineType[,shift]]]) → None
cv2.ellipse(img,box,color[,thickness[,lineType]]) → None
用折线逼近椭圆弧 cv2.ellipse2Poly(center,axes,angle,arcStart,arcEnd,delta) → pts
填充多边形 cv2.fillConvexPoly(img,points,color[,lineType[,shift]]) → None
填充多边形内部 cv2.fillPoly(img,pts,color[,lineType[,shift[,offset]]]) → None
在图像中显示文本字符串 cv2.putText(img,text,org,fontFace,fontScale,color[,thickness[,lineType[,bottomLeftOrigin]]]) → None
获得文本字符串的宽度和高度 cv2.getTextSize(text,fontFace,fontScale,thickness) → retval, baseLine
画外部和内部的轮廓 cv2.drawContours(image,contours,contourIdx,color[,thickness[,lineType[,hierarchy[,maxLevel[,offset]]]]]) → None

11 cvtColor颜色空间转换
#彩色图像转为灰度图像
img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)

灰度图像转为彩色图像
img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)

12 二值化
• 原型:threshold(src,thresh,maxval,type,dst=None)
• 作用:将图像的每个像素点进行二值化
• 参数:thresh,阈值(最小值)。maxval,二值化的最大取值。
type,二值化类型,一般设为0,也可以取以下的值:

13 色调,明暗,直方图和Gamma曲线
Chapter fifteen: 直方图
绘制直方图 cv2.calcHist(image,channels,mask,histSize,ranges[,hist[,accumulate]]) → hist
直方图均衡化 cv2.equalizeHist(src[,dst]) → dst
cv2.createCLAHE([,clipLimit[,tileGridSize]]) → retval
直方图反向投影 cv2.calcBackProject(image,channels,hist,range,scale[,dst]) → dst
归一化 cv2.normalize(src[,dst[,alpha[,beta[,norm_type[.dtype[,mask]]]]]])→dst

通过cv2.cvtColor把图像从BGR转换到HSV

img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

H空间中,绿色比黄色的值高一点,所以给每个像素+15,黄色的树叶就会变绿

turn_green_hsv = img_hsv.copy()
turn_green_hsv[:, :, 0] = (turn_green_hsv[:, :, 0]+15) % 180
turn_green_img = cv2.cvtColor(turn_green_hsv, cv2.COLOR_HSV2BGR)
cv2.imwrite(‘turn_green.jpg’, turn_green_img)

减小饱和度会让图像损失鲜艳,变得更灰

colorless_hsv = img_hsv.copy()
colorless_hsv[:, :, 1] = 0.5 * colorless_hsv[:, :, 1]
colorless_img = cv2.cvtColor(colorless_hsv, cv2.COLOR_HSV2BGR)
cv2.imwrite(‘colorless.jpg’, colorless_img)

减小明度为原来一半

darker_hsv = img_hsv.copy()
darker_hsv[:, :, 2] = 0.5 * darker_hsv[:, :, 2]
darker_img = cv2.cvtColor(darker_hsv, cv2.COLOR_HSV2BGR)
cv2.imwrite(‘darker.jpg’, darker_img)

14 均值模糊、中值模糊,高斯模糊,双边模糊
cv2.blur
• 原型:blur(src,ksize,dst=None,anchor=None,borderType=None)
• 作用:对图像进行算术平均值模糊
• 参数:ksize,卷积核的大小。dst,若填入dst,则将图像写入到dst矩阵。
cv2.medianBlur
• 原型:mediaBlur(src,ksize,dst=None)
• 作用:对图像进行中值模糊
cv2.GaussianBlur
• 原型:GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
• 作用:对图像进行高斯模糊
• 参数:sigmaX,X方向上的方差,一般设为0让系统自动计算。
cv2.bilateralFilter
• 原型:bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
• 作用:对图像进行双边模糊
• 参数:int d: 表示在过滤过程中每个像素邻域的直径范围。如果这个值是非正数,则函数会从第五个参数sigmaSpace计算该值。
double sigmaColor: 颜色空间过滤器的sigma值,这个参数的值月大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域。 (这个参数可以理解为值域核的)
double sigmaSpace: 坐标空间中滤波器的sigma值,如果该值较大,则意味着越远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当d>0时,d指定了邻域大小且与sigmaSpace无关,否则d正比于sigmaSpace. (这个参数可以理解为空间域核的)

15 图像梯度
cv2.Sobel
Sobel算子是高斯平滑和微分操作的结合体,所以他的抗噪声能力很好。他计算的是一阶导数,可以自己定义x方向或者y方向。

• 原型: Sobel(src,ddepth,dx,dy,dst=None,ksize=None,scale=None,delta=None,borderType=None)
• 作用:对图像进行Sobel算子计算。检测出其边缘。
• 参数:dx,x方向上的导数阶数;dy,y方向上的导数阶数。

cv2.scharr
• 原型:Scharr(src, ddepth, dx, dy, dst=None, scale=None, delta=None, borderType=None, /)
是Sobel的优化版,在使用3*3卷积核时这个优于Sobel,其它尺寸的卷积核用Sobel就行。

cv2.Laplacian
Laplacian算子是个二阶微分。下面两个卷积核,靠上的是4邻域的,靠下的是8邻域的。函数默认为8邻域。

16 角点检测
Harris角点检测 cv2.cornerHarris(src,blockSize,ksize,k[,dst[,borderType]]) → dst
提炼角位置 cv2.cornerSubPix(image,corners,winSize,zeroZone,criteria) → None
Shi-Tomasi角点检测 cv2.goodFeaturesToTrack(image,maxCorners,qualityLevel,minDistance[,corners[,mask[,blockSize[,useHarrisDetect[,k]]]]]) → corners
SURF cv2.SURF([hessianThreshold[,n0ctaves[,n0ctaveLayers[,extend[,upright]]]]]) →
SURF检测和计算要点 .detect(image[,mask]) → keypoints
.detectAndCompute(image,mask[,descriptors[,useProvidedKeypoints]]) → keypoints,descriptors
FAST特征检测 cv2.FastFeatureDetector_create([,threshold[,nonmaxSuppression[,type]]]) → retval
绘制要点 cv2.drawKeypoints(image,keypoints,outImage[,color[,flags]])→outImg

17 视频功能
VideoCapture(0)表示打开默认的相机

cap = cv2.VideoCapture(0)

设置要保存视频的编码,分辨率和帧率

video = cv2.VideoWriter(
“time_lapse.avi”,
cv2.VideoWriter_fourcc(‘M’,‘P’,‘4’,‘2’),
out_fps,
size
)

Chapter twenty-two: 在视频中找到并跟踪目标对象
Meanshift cv2.meanShift(proImage,window,criteria) → retval,window
camshift cv2.camShift(proImage,window,criteria) → retval,window

18 光流
cv2.calcOpticalFlowPyrLK(prevImg,nextImg,prevPts[,nextPts[,status[,err[,winSize[,maxLevel[,criteria[,derivLambda[,flags]]]]]]]])
→nextPts,status,err
cv2.goodFeaturesToTrack(image,maxCorners,qualityLevel,minCorners[,corners[,mask[,blockSize[,useHarrisDetector[,k]]]]]) → corners
GF稠密光流 cv2.calcOpticalFlowFarneback(prevImg,nextImg,pyr_scale,levels,winsize,iterations,poly_n,poly_sigma,flags[,flow]) → flow

19 机器学习
K近邻 cv2.KNearest.train(trainData,responses[,sampleIdx[,isRegression[,maxK[,updateBase]]]]) → retval
cv2.KNearest.find_nearest(samples,k[,results[,neighborResponses[,dists]]]) → retval,results,neighborResponses,dist
SVM机 cv2.SVM(trainData,responses[,varIdx[,sampleIdx[,params]]]) →
.train(traindata,responses[,varIdx[,sampleIdx[,params]]]) → retval
.train_auto(trainData,responses,varIdx,sampleIdx,params[,k_fold[,Cgrid[,gammaGrid[,pGrid[,nuGrid[,coeffGrid[,degreeGrid[,balanced]]]]]]]]) → retval
.predict(sample[, returnDFVal]) → retval
.save()
K值聚类 cv2.kmeans(data,K,criteria,attempts,flags[,bestLabels[,centers]]) → retval,bestLabels,centers
————————————————
 

以上是关于机器学习之cv2函数方法大全-计算机视觉的主要内容,如果未能解决你的问题,请参考以下文章

机器学习之cv2函数方法大全-计算机视觉

数学之路-python计算实战(16)-机器视觉-滤波去噪(邻域平均法滤波)

深度学习之四:卷积神经网络基础

[OpenCV-Python] OpenCV 中计算摄影学 部分 IX 对象检测 部分 X

参考《深度学习之PyTorch实战计算机视觉》PDF

计算机视觉基础图像知识点整理