我是靠谱客的博主 热情冰淇淋,最近开发中收集的这篇文章主要介绍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)

 

最后

以上就是热情冰淇淋为你收集整理的Opencv的基础操作一、图像填充 二、形态学操作 三、图像平滑的全部内容,希望文章能够帮你解决Opencv的基础操作一、图像填充 二、形态学操作 三、图像平滑所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部