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)

输出结果对比如下:

Opencv的基础操作_第1张图片

 

 二、形态学操作

首先读入原始图像:

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

 Opencv的基础操作_第2张图片

 

定义卷积核:

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

腐蚀函数:

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

输出结果如下:

 Opencv的基础操作_第3张图片

膨胀函数:

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

输出结果如下:

Opencv的基础操作_第4张图片

开运算:先腐蚀后膨胀

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

输出结果如下:

Opencv的基础操作_第5张图片

闭运算:先膨胀后腐蚀

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

输出结果如下:

Opencv的基础操作_第6张图片 

梯度:膨胀-腐蚀

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

输出结果如下:

Opencv的基础操作_第7张图片

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

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

输出结果如下:

Opencv的基础操作_第8张图片

黑帽:闭运算-原始输入

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

输出结果如下:

Opencv的基础操作_第9张图片

 三、图像平滑

传入原始图像:

Opencv的基础操作_第10张图片

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

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

Opencv的基础操作_第11张图片

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

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

 Opencv的基础操作_第12张图片

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

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

Opencv的基础操作_第13张图片

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

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

Opencv的基础操作_第14张图片

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

median = cv2.medianBlur(cat, 3)

Opencv的基础操作_第15张图片

 

你可能感兴趣的:(opencv,计算机视觉,python)