OpencvDay2

1.滤波函数的计算

#均值滤波 blur()   平滑处理(模糊)
blur = cv2.blur(noise,(3,3))

#高斯滤波  考虑近的权重大,远的权重少
gausi = cv2.GaussianBlur(noise,(5,5),1)

#中值滤波--处理椒盐噪声
mid = cv2.medianBlur(noise,5)

2.形态学处理(morphologyEx函数)

	#需要定义一个核函数,一般是np.uint8
	kernel =np.ones((60,60),np.uint8)
    #形态学方法 cv2.MORPH_TOPHAT礼帽 = 原始 - 开运算      cv2.MORPH_BLACKHAT 		(黑帽=闭运算 - 原始)
    
    #开运算
    open_m = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
    #闭运算
    close_m = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
    #梯度运算 = 膨胀-腐蚀
    img_sub = cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)

    # kernel 代表腐蚀操作时所采用的结构类型。 iterations 是腐蚀操作的迭代的次数,默认为1
    erosion = cv2.erode(img,kernel,iterations=1)
    #膨胀
    open_ = cv2.dilate(erosion,kernel,iterations=1)

3.Sobel算子

> cv2.Sobel(图像, 输出图像的深度(-1表示与原图像相同的深度), dx, dy, ksize)
>   	y:当组合为dx=1,dy=0时求x方向的一阶导数    dx=0,dy=1时求y方向的一阶导数
>     	ksize必须是1,3,5或者7,默认为3
    y_img = cv2.Sobel(noise,-1,0,1,ksize=3)
    #不截断,为了后面取绝对值  边缘更大细节多了
    x_img = cv2.Sobel(noise,cv2.CV_64F,1,0,ksize=3)
    #使用线性变换转换输入数组元素成8位无符号整型。
    x_img = cv2.convertScaleAbs(x_img)
    x_y = cv2.addWeighted(x_img,0.5,y_img,0.5,0)

#canny的边缘检测
#1.高斯平滑去噪声 2.计算梯度sobel算子 3.非极大值抑制 4.双阈值检测 5.抑制边缘
cv2.Canny(img,40,100)

4.cv2.Laplacian()拉普拉斯

    moon = cv2.imread('moon.tif',0)
    cv2.imshow('moon',moon)
    moon_a = cv2.Laplacian(moon,-1)

    moon_c = cv2.Laplacian(moon,cv2.CV_64F)
    moon_c = cv2.convertScaleAbs(moon_c)

5.金字塔

    #高斯金字塔的向下采样,越来越小  先卷积后去掉某行某列
    img_up = cv2.pyrUp(img)
    #高斯金字塔的向上采样,越来越大 插入0后卷积
    img_down = cv2.pyrDown(img)

6.轮廓的检测 二值图像

   cv2.findContours(image, mode, method)
   	cv2.RETR_EXTERNAL:表示只检测外轮廓
   	cv2.RETR_LIST:检测的所有的轮廓保存到链表
   	cv2.RETR_CCOMP:建立两个轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。
   	cv2.RETR_TREE:建立一个等级树结构的轮廓(常用)
   	
  	method: cv2.CHAIN_APPROX_NONE:存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
   			cv2.CHAIN_APPROX_SIMPLE:压缩水平方向,垂直方向,对角线方向,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息

    img = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
    ret ,img = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
    #binary 是返回二值图像本身, contours是返回一个list,list中每个元素都是图像中的一个轮廓轮廓
    binary,contours,hierarchy = cv2.findContours(img,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

    dra_img = im.copy() #为了不修改原图
    #轮廓的绘制 cv2.drawContours(图像,轮廓list,-1是全画,什么颜色,线条多粗)
    dra_img = cv2.drawContours(dra_img,contours,-1,(0,0,255),3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值