opencv-python笔记1

opencv-python笔记

1.1读入与书写等

frame=cv2.imread("路径")  #读入图像
cv2.imshow('name',frame)
cv2.imwrite("D:\\test.jpg",img)  #将img图片保存到D盘下,保存的文件名为test.jpg
cv2.waitKey(a)  #等待函数 ,为0则永存
cv2.destroyAllWindows() #删除所有窗口

注意,以上代码别忘了 import cv;,还有就是print(frame),出来的是一个矩阵而不是彩色图片

1.2灰度与彩色图像

1.2.1

灰度图像只有一个通道,彩色则有三个通道,分别为B\G\R。(在不同的地方也有可能顺序变为RGB)

在处理不同的图象时,我们会用到不同的图像,如轮廓检测,一般会用灰度图进行。

1.2.2像素处理

像素获取
p=img[12,34]# 灰度,彩色同下

blue=frame[12,34,0]  #得到frame图像在第12行第34列的蓝色通道的像素值
green=frame[12,34,1] #得到frame图像在第12行第34列的绿色通道的像素值
red =frame[12,34,2]  #得到frame图像在第12行第34列的红色通道的像素值

1.3通道处理

1.3.1 拆分

#img为彩色图像
#法一:一次性拆分
b,g,r=cv2.split(img)  #其中b,g,r为图像,可以理解为把img彩色图像
                      #拆分为b,g,r这3个灰度图像
#法二:分别拆分
b=cv2.split(img)[0]
g=cv2.split(img)[1]
r=cv2.split(img)[2]

1.3.2 合并

#img为彩色图像
img=cv2.merge([b,g,r])  #b,g,r可以看作是3个灰度图像,注意顺序

引用numpy库,处理矩阵数组类非常好用
import numpy as np
b=np.zeros((rows,cols),dtype=img.dtype)  #表示b图像里面像素都是0,
                                         #img表示彩色图
#把zeros 改ones则全为一

1.4 运算

在opencv中cv的加法与cv运用numpy的加法有不同之处,前者为饱和加法,后者为取模加法。(减法与乘除同理)其实加减法也可以理解为为原图加滤镜,就像高光阴影。

result=cv2.add(img1,img2) #+
result=cv2.substract(img1,img2) #-
乘除法在opencv中几乎不用,很容易全黑白

2.1类型转换与阈值操作

2.1 灰度与彩色的变换

img2=cv2.cvtColor(img1,COLOR_BGR2GRAY)  #img1为原图像,img2为
                                        #转换后的灰度图像
img2=cv2.cvtColor(img1,COLOR_BGR2RGB)  #img1为原图像,img2为
                                       #转换后的RGB图像

img2=cv2.cvtColor(img1,COLOR_GRAY2BGR)  #img1为原图像,img2为
                                        #转换后的BGR图像

2.2 阈值处理

在我做过的项目里,这一步算是继图像输入后最重要的一步了,二值化的处理程度决定了后面图像处理的精度与可视化程度

retval,dst=cv2.threshold(scr,127,255,cv2.THRESH_BINARY)  #二进制阈值化
127:下限 ,255:上限,最后一者为二值化的方式
有cv2.THRESH_BINARY_INV #反二进制阈值化
 cv2.THRESH_TRUNC  #截断阈值化
 cv2.THRESH_TOZERO_INV  #反阈值化为0

以上函数不用记住,用的时候查就好。

3.1图像基础处理与形态学变换

3.1滤波

1.均值滤波

dst=cv2.blur(scr,(3,3))

2.中值滤波

dst=cv2.medianBlur(scr,3)
ksize:核大小(必须为大于1的奇数,写一个数即可,不是写成(N,N)的形式)

3.高斯滤波

dst=cv2.GaussianBlur(scr,(3,3),0)
ksize:核大小(必须为奇数)
sigmaX:X方向方差(不写Y方向方差,默认与X方向方差一致),一般直接令sigmaX=0,他会自己计算出一个方差

3.2形态学变换

1.腐蚀

import numpy as np
先二值化再处理
kernel=np.ones((5,5),np.uint8)
dst=cv2.erode(scr,kernel)
#dst=cv2.erode(scr,kernel,iterations=9)  #进行9次腐蚀

2.膨胀

其实就是腐蚀的反操作

#进行多次膨胀
import numpy as np
kernel=np.ones((5,5),np.uint8)  #生成一个5行5列的卷积核(里面的值都是1)
dst=cv2.dilate(scr,kernel,iterations=9)

腐蚀




2.膨胀

其实就是腐蚀的反操作

#进行多次膨胀
import numpy as np
kernel=np.ones((5,5),np.uint8) #生成一个5行5列的卷积核(里面的值都是1)
dst=cv2.dilate(scr,kernel,iterations=9)




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