opencv学习笔记2

1.数值计算

(img_cat + img_cat2) [ :5, :, 0]-----------np的+,超出255取超出部分
cv2.add(img_cat,img_cat2) [:5,:,0]---------与np的+不同,超出255就取255

2.图像融合

  1. 融合两张图的前提是尺寸一致
  2. cv2.resize(img, (新img的宽, 高))#shape输出的是高和宽反过来
  3. cv2.addWeighted 就相当于α * X1 + β * X2 + b,α=0.4,β=0.6,分别是两张图片的权重,以这样的形式融合
  4. res = cv2.addWeighted(img_cat,0.4,img_dag,0.6,0)#融合,cat0.4,dog0.6,亮度为0
  5. res = cv2.resize(img,(0,0),fx=3,fy=1)#宽是原来的三倍,高不变

3.图像处理

3.1图像阈值

ret, dst = cv2.threshold(src, thresh, maxval, type)
src: 输入图,只能输入单通道图像,通常来说为灰度图
thresh:一般取127和255
maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
type:二值化操作的类型,包含以下5种类型:
cv2.THRESH_BINARY 超过阈值部分取maxval(最大值127或255,否则取0
cv2.THRESH_BINARY_INV THRESH_BINARY的反转
cv2.THRESH_TRUNC 大于阈值部分设为阈值(127或255),否则不变
cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转
return返回值
dst: 输出图
thresh: 阈值

*3.2图像滤波(平滑

黑点叫椒噪音,白的叫盐噪音,都有叫椒盐
cv2.blur # 均值滤波:简单的平均卷积操作
cv2.boxFilter # 方框滤波:基本和均值一样,可以选择归一化
cv2.GaussianBlur # 高斯滤波:高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
cv2.medianBlur # 中值滤波:相当于用中值代替
————————————————
版权声明:本文为CSDN博主「华尔街的幻觉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_29950703/article/details/107651267

越界相当于大于255取255
vsyack:竖的拼接
hstack:横的拼接

3.3形态学

  1. 腐蚀与膨胀
    cv2.erode() 和 cv2.dilate()
    腐蚀=变瘦,膨胀=变胖
    迭代次数越多 和 kernel越大 效果越明显
import cv2
import numpy as np
img = cv2.imread('dige.png')
kernel = np.ones((3,3),np.uint8) 
erosion = cv2.erode(img,kernel,iterations = 1)  # 迭代次数越多 和 kernel越大 效果越明显
dilate = cv2.dilate(img,kernel,iterations = 1)

res = np.hstack((img,erosion,dilate))
cv_show('dige and erode and dilate',res)

  1. 开运算&闭运算
    开:先腐蚀,再膨胀
    闭:先膨胀,再腐蚀
  2. 梯度运算
    梯度 = 膨胀-腐蚀
    多出来的白边 减去 减少的白边,即计算一个轮廓出来
  3. 礼帽&黑帽
    礼帽 = 原始输入 - 开运算结果 (原图 - 没刺的 = 剩下刺)
    黑帽 = 闭运算 - 原始输入 (字和刺胖了的 - 原图 = 胖的边缘部分)

4.图像梯度–Scharr算子和Sobel算子的用法相同,Laplacian算子就不存在x y了

1.Sobel算子:分X和Y轴
cv2.Sobel(src, ddepth, dx, dy, ksize) 进行sobel算子计算
参数说明:src表示当前图片,ddepth表示图片深度,这里使用cv2.CV_64F使得结果可以是负值, dx表示x轴方向,dy表示y轴方向, ksize表示移动方框的大小
cv2.convertScalerAbs(src) 取绝对值

sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)# 1,0: 表示只算水平的,不算竖直的

#分别计算x和y,再求和,融合的较好,不建议直接计算
2.Scharr算子
用法基本相同,Scharr算子比Sobel算子更敏感,捕获更多细节,更丰富
3.Laplacian算子

laplacian = cv2.Laplacian(img,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)   

今天的学习就到这啦!

你可能感兴趣的:(opencv学习,opencv,学习)