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),出来的是一个矩阵而不是彩色图片
灰度图像只有一个通道,彩色则有三个通道,分别为B\G\R。(在不同的地方也有可能顺序变为RGB)
在处理不同的图象时,我们会用到不同的图像,如轮廓检测,一般会用灰度图进行。
像素获取
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列的红色通道的像素值
#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]
#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则全为一
在opencv中cv的加法与cv运用numpy的加法有不同之处,前者为饱和加法,后者为取模加法。(减法与乘除同理)其实加减法也可以理解为为原图加滤镜,就像高光阴影。
result=cv2.add(img1,img2) #+
result=cv2.substract(img1,img2) #-
乘除法在opencv中几乎不用,很容易全黑白
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图像
在我做过的项目里,这一步算是继图像输入后最重要的一步了,二值化的处理程度决定了后面图像处理的精度与可视化程度
retval,dst=cv2.threshold(scr,127,255,cv2.THRESH_BINARY) #二进制阈值化
127:下限 ,255:上限,最后一者为二值化的方式
有cv2.THRESH_BINARY_INV #反二进制阈值化
cv2.THRESH_TRUNC #截断阈值化
cv2.THRESH_TOZERO_INV #反阈值化为0
以上函数不用记住,用的时候查就好。
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,他会自己计算出一个方差
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)