计算机视觉入门(二)

1.腐蚀操作

#形态学-腐蚀操作
img = cv2.imread('dog.jpg',cv2.IMREAD_GRAYSCALE)
# cv2.imshow('img', img)
# cv2.waitKey(0)#等待时间,毫秒级别 0表示任意键终止
# cv2.destroyAllWindows()#触发条件时,关闭
img= cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
#plt.imshow(img)
#plt.show()
#形态学腐蚀操作44)表示一次操作所腐蚀的范围,iterations:表示腐蚀操作进行多少次
 kernel=np.ones((4,4),np.uint8)
 erosion=cv2.erode(img,kernel,iterations=5)
 plt.imshow(erosion)
 plt.show()

在这里插入图片描述

2.膨胀操作

#膨胀操作
#(4,4)表示一次操作所膨胀的范围,iterations:表示膨胀操作进行多少次
kernel=np.ones((4,4),np.uint8)
img_dilate=cv2.dilate(img,kernel,iterations=6)
plt.imshow(img_dilate)
plt.show()

在这里插入图片描述

3.开运算与闭运算

#开:先腐蚀 再膨胀
kernel=np.ones((4,4),np.uint8)
opening=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
#闭:先膨胀 后腐蚀
kernel = np.ones((4, 4), np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

4.梯度运算

#梯度=膨胀-腐蚀
pie=cv2.imread('img1.jpg')
kernel=np.ones((20,20),np.uint8)
erode=cv2.erode(pie,kernel,iterations=2)
dilate=cv2.dilate(pie,kernel,iterations=2)
res=np.hstack((pie,erode,dilate))
plt.imshow(res)
plt.show()
gradient=cv2.morphologyEx(pie,cv.MORPH_GRADIENT,kernel)
plt.imshow(gradient)
plt.show()

5.礼帽与黑帽

#礼帽=原始输入-开运算结果
tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
plt.imshow(tophat)
plt.show()

在这里插入图片描述

blackhat=cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
plt.imshow(blackhat)
plt.show()

在这里插入图片描述

6.计算图像梯度

6.1. Sobel算子

在这里插入图片描述

#sobel算子
#ddpeth:图像深度(通常为-1)  dx和dy表示水平和竖直方向  ksize是Sobel算子的大小
# dst=cv2.Sobel(src,ddepth,dx,dy,ksize)
sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)#dx=1表示算水平不算竖直,只有边界才有梯度
plt.imshow(sobelx)
plt.show()

在这里插入图片描述

sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)#dx=1表示算水平不算竖直,只有边界才有梯度(右边减左边)
#白减黑是正数 黑到白是负数 负数被截断
sobelx=cv2.convertScaleAbs(sobelx)#将值转换为正数
plt.imshow(sobelx)
plt.show()

在这里插入图片描述

sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)#dx=1表示算水平不算竖直,只有边界才有梯度(右边减左边)
#白减黑是正数 黑到白是负数 负数被截断
sobelx=cv2.convertScaleAbs(sobelx)#将值转换为正数
plt.imshow(sobelx)
plt.show()

在这里插入图片描述

#(垂直方向进行梯度运算)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
sobely = cv2.convertScaleAbs(sobely)  #将值转换为正数
plt.imshow(sobely)
plt.show()

在这里插入图片描述

算出x,y 然后将x,y一起算
#分别算X,Y 再求和
sobelxy=cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
plt.imshow(sobelxy)
plt.show()


在这里插入图片描述

6.2. Scharr算子与 laplacian算子

在这里插入图片描述
在这里插入图片描述

#Scharr算子
scharrx=cv2.Scharr(img,cv2.CV_64F,1,0)
scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1)
scharrx=cv2.convertScaleAbs(scharrx)
scharry = cv2.convertScaleAbs(scharry)
scharrxy=cv2.addWeighted(scharrx,0.5,scharry,0.5,0)
plt.imshow(sobelxy)
plt.show()

#laplacian算子
laplacian=cv2.Laplacian(img,cv2.CV_64F)
laplacian=cv2.convertScaleAbs(laplacian)
plt.imshow(laplacian)
plt.show()

res=np.hstack((sobelxy,scharrxy,laplacian))
plt.imshow(res)

在这里插入图片描述

7.图像平滑处理

7.1.均值滤波

在这里插入图片描述

#均值滤波:简单的平均卷积操作
blur=cv2.blur(img,(3,3))
res = np.hstack((img,blur))
plt.imshow(res)
plt.show()

在这里插入图片描述

7.2.方框滤波

#方框滤波:true为进行归一化
box=cv2.boxFilter(img,-1,(3,3),normalize=False)
res = np.hstack((img, box))
plt.imshow(res)
plt.show()

在这里插入图片描述

7.3.高斯滤波

#高斯滤波:满足高斯分布
aussian=cv2.GaussianBlur(img,(5,5),1)
res = np.hstack((img, aussian))
plt.imshow(res)
plt.show()

在这里插入图片描述

7.4.中值滤波

#中值滤波(效果最好)
median=cv2.medianBlur(img,5)
res = np.hstack((img, median))

8.图像阈值

  • ret,dst=cv2.threshold(src,thresh,maxval,type)
    src:输入图,只能输入单通道图像,一般为灰度图
    dst:输出图
    thresh:阈值
    maxval:当像素值超过阈值(或者小于阈值),所赋予的值
    type:二值化(大于取一个值,小于取另一个值)操作的类型,包含五种类型
  • THRESH_BINARY:超过阈值部分取maxval,否则为0
  • THRESH_BINARY_INV: THRESH_BINARY的反转
  • THRESH_TRUNC:大于阈值部分设为阈值,否则不变
  • THRESH_TOZERO:大于阈值部分不改变,否则设为0
  • THRESH_TOZERO_INV: THRESH_TOZERO的反转
ret,thresh1=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
ret,thresh2=cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3=cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
ret,thresh4=cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
ret,thresh5=cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
title=['Original','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images=[img,thresh1,thresh2,thresh3,thresh4,thresh5]
for i in range(6):
    plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
    plt.title(title[i])
    plt.xticks([]),plt.yticks([])

在这里插入图片描述
在这里插入图片描述

9.图像灰度化

img = cv2.imread('dog.jpg',cv2.IMREAD_GRAYSCALE)
# cv2.imshow('img', img)
# cv2.waitKey(0)#等待时间,毫秒级别 0表示任意键终止
# cv2.destroyAllWindows()#触发条件时,关闭
img= cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.show()

在这里插入图片描述

10.Canny边缘检测

  • 使用高斯滤波,以平滑图像,滤除噪声
  • 计算图像中每个像素点的梯度强度和方向
  • 应用非极大值(Non-Maximum-Suppression)抑制,以消除边缘检测带来的杂散响应
  • 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘
  • 通过抑制孤立的弱边缘最终完成边缘检测
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
img = cv2.imread("dog.jpg", cv2.IMREAD_GRAYSCALE)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# plt.imshow(img)
# plt.show()
#Canny边缘检测
v1=cv2.Canny(img,120,250)#minVal=80 maxVal=150
v2=cv2.Canny(img,50,100)
res=np.hstack((v1,v2))
plt.imshow(res)
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值