Opencv(Python) 随便记记
一、图像的读取,显示和保存
唯一想提的就是,读取的时候通过更改第二个参数,可以设置读取图像的方式:
cv.IMREAD_COLOR | 加载彩色图像 | 默认 | |
---|---|---|---|
cv.IMREAD_GRAYSCALE | 加载灰度图像 | ||
cv.IMREAD_UNCHANGED | 加载图像,包括α通道 |
二、获取图像属性
a = cv2.imread()
row, col, chn = a. shape —返回图像的行数列数和通道数
三、图像加法
1、numpy加法
方法: img1 + img2
若图像1+图像2,对应像素点的像素值和<=255,值为对应的像素值之和;对应像素点的像素和>255,结果为对255取模
2、opencv加法
方法:cv2.add(img1, img2)
当像素值之和小于等于255时不变,当结果大于255时则为255
四、图像融合
方法:img = cv.addWeighted(img1, alpha, img2, beta, gamma)
图像融合:结果图像=图像1 * 系数1+图像2 * 系数2 + 亮度调节量
最后一个参数不可以省略(可以写0,表示没有要调节的亮度要求)
五、图像类型转换
常用的三种转换方式:
cv2.COLOR_BGR2GRAY
cv2.COLOR_BGR2RGB
cv2.COLOR_GRAY2BGR
import cv2 as cv
a = cv.imread("",cv.IMREAD_UNCHANGED)
b = cv.cvtColor(a, cv2.COLOR_BGR2RGB)
六、图像缩放
方法1:dst = cv2.resize(src, dsize, fx, fy)
src表示原始图像,dsize表示目标大小(列,行),fx和fy表示缩放大小
dst = cv2.resize(src, (122,122))
dst = cv2.resize(src, None, fx=0.5, fy=0.7)
可以看出两种调整大小的方式选择一种即可,若选择dsize则后面不需要设置参数,若选择缩放参数,则dsize置None,缩放大小调整也是按照列和行的顺序
七、图像翻转
方法:dst = cv2.flip(src, flipCode)
flipCode可以为0:表示以x轴为旋转轴翻转,>0则以y轴为对称轴及逆行翻转,<0水平轴翻转一次然后竖直轴也翻转一次
八、阈值分割
分割方法 | 处理方法 |
---|---|
二进制阈值分割 | 像素值比阈值大,处理为最大值;比阈值小,处理为零 |
反二进制阈值分割 | 像素值大于阈值处理为0,小于等于阈值处理为最大值(255) |
截断阈值分割 | 像素值大于阈值则处理为阈值,小于等于阈值则不处(保持) |
反 阈值化为0 | 像素值大于等于阈值的处理为0,其他保持不变 |
阈值化为0 | 像素值大于等于阈值则保持不变,小于阈值处理为0 |
方法:
retval, dst = cv2.threshold(src, thresh, maxval, type)
参数说明:retval和thresh都是阈值,一般情况下一致
dst表示图像处理之后的结果,src表示源图像,maxval表示最大值(1或者255,常用255),type表示类型,指定上述五种(实际上不止五种)的阈值分割方法
cv2.THRESH_BINARY 对应二进制阈值化
cv2.THRESH_BINARY_INV 对应反二进制阈值化
cv2.THRESH_TRUNC 对应截断阈值分割
cv2.THRESH_TOZERO 对应阈值化为0
cv2.THRESH_TOZERO_INV 对应反阈值化为0
九、图像平滑处理(使图像更加平滑,降噪)
滤波类型 | 描述 | 方法 |
---|---|---|
均值滤波 | 取一个核内所有的点的像素值相加除以像素点的个数 | dst = cv2.blur(src, disze) (disze一般是一个表示核大小的元组,比如(3,3)) |
方框滤波 | 根据选择进行滤波操作,最后一个参数为true的时候等价于均值滤波 | dst = cv2.boxFilter(src, depth, dsize, normalize) (depth为目标深度,通常为-1表示和原始图像相同,最后一个参数为布尔类型,true表示取平均,false表示只求和) |
高斯滤波 | 加权平均,即核内每一个像素点的像素值乘对应的权重取和后求平均值 | dst = cv2.GaussianBlur(src, dsize, sigmaX) (sigMax用来控制权重,表示X方向的方差,一般设为0,系统自动计算方差) |
中值滤波 | 核内所有像素值按照大小排列,取中值进行赋值操作 | dst = cv2.medianBlur(src, size) size是一个整型的奇数 |
十、图像形态学操作(主要针对二值图像)
1、图像腐蚀
将一个卷积核从原始图像的每一个像素点进行遍历,以卷积核接触到的像素点如果是黑色,则将该点变为黑色(赋值为1)
方法: dst = cv2.erode(src, kernel, iterations) kernel表示卷积核,iterations表示迭代次数
kernel = np.ones((5,5), np.unit8) #生成一个卷积核
dst = cv2.erode(img, kernel, iterations = 1)
#图像腐蚀去掉毛刺,卷积次数缺省值为1,如果去掉毛刺多则增加迭代次数
2、图像膨胀
图像膨胀是图像腐蚀的逆操作。