Opencv的基础操作

一、图像填充

首先定义图像显示函数:

def cv_show(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

图像读取:

img_cat = cv2.imread('cat.jpg')

定义图像填充的大小:

top_size, bottom_size, left_size, right_size = (50, 50, 50, 50)

 接下来分别采用复制法、反射法、外包装法、常量法进行填充。

复制法:

# 复制法,复制最边缘像素
replicate = cv2.copyMakeBorder(img_cat, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)

反射法: 

# 反射法,对感兴趣的图像中的像素在两边进行复制
reflect = cv2.copyMakeBorder(img_cat, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REFLECT)

第二种反射法

# 反射法,也就是以最边缘像素为周,对称
reflect101 = cv2.copyMakeBorder(img_cat, top_size, bottom_size, left_size, right_size,
                                borderType=cv2.BORDER_REFLECT_101)

外包装法:

# 外包装法
warp = cv2.copyMakeBorder(img_cat, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_WRAP)

常量法:

# 常量法,常数值填充,此处填充灰色
constant = cv2.copyMakeBorder(img_cat, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_CONSTANT,
                              value=0)

输出结果对比如下:

 

 二、形态学操作

首先读入原始图像:

pie = cv2.imread('pie.jfif')

 

 

定义卷积核:

kernel = np.ones((10, 10), np.uint8)

腐蚀函数:

dige_erosion = cv2.erode(pie, kernel=kernel, iterations=1)

输出结果如下:

 

膨胀函数:

dige_dilate = cv2.dilate(pie, kernel=kernel, iterations=1)

输出结果如下:

开运算:先腐蚀后膨胀

opening = cv2.morphologyEx(pie, cv2.MORPH_OPEN, kernel=kernel)

输出结果如下:

闭运算:先膨胀后腐蚀

closing = cv2.morphologyEx(pie, cv2.MORPH_CLOSE, kernel=kernel)

输出结果如下:

 

梯度:膨胀-腐蚀

gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)

输出结果如下:

礼帽:原始输入-开运算结果

tophat = cv2.morphologyEx(pie, cv2.MORPH_TOPHAT, kernel)

输出结果如下:

黑帽:闭运算-原始输入

blackhat = cv2.morphologyEx(pie, cv2.MORPH_BLACKHAT, kernel)

输出结果如下:

 三、图像平滑

传入原始图像:

均值滤波:简单的平均卷积操作

blur = cv2.blur(cat, (3, 3))

 方框滤波:基本和均值一样,可以选择归一化, normalize为true时就做归一化,和均值滤波一样

box = cv2.boxFilter(cat, -1, (3, 3), normalize=True)

 

 normalize为False时不做归一化,及不做均值处理,越界后取255

box = cv2.boxFilter(cat, -1, (3, 3), normalize=False)

 高斯滤波:高斯模糊的卷积核里的数值是满足高斯分布的,相当于更重视中间的

gaussian = cv2.GaussianBlur(cat, (3, 3), 1)

中值滤波:相当于用中值代替

median = cv2.medianBlur(cat, 3)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值