opencv对图像进行滤波处理并进行边缘检测
任务描述:
- 读取图片并在图片上输出文本信息;
- 对图片进行均值滤波处理并有文本提示信息;
- 对图片进行中值滤波处理并有文本提示信息;
- 对图片进行高斯滤波处理并有文本提示信息;
- 对图片进行高斯边缘检测处理并有文本提示信息。
实验图片如下:
实验步骤:
(1)利用sublime编程软件对图像进行处理,首先将实验图片放在绝对位置,读取原图像;
代码实例:
1 import cv2 as cv #导入opencv库 2 3 import numpy as np 4 5 from PIL import Image, ImageDraw, ImageFont 6 7 src = cv.imread("test14.jpg")
(2)实现在图像上显示文本信息并展示;
代码实例:
1 src1 = Image.fromarray(cv.cvtColor(src, cv.COLOR_BGR2RGB)) 2 font = ImageFont.truetype('simsun.ttc', 20)#自定义字体及字体大小
1 # 文字输出位置 2 position = (5,5) 3 # 输出内容 4 str = '原图像' 5 draw = ImageDraw.Draw(src1) 6 draw.text(position, str, font=font, fill=(255, 0, 0)) 7 src1 = cv.cvtColor(np.asarray(src1), cv.COLOR_RGB2BGR) 8 cv.imshow("scr1", src1) 9 cv.waitKey()
运行效果:
(3)对原图像进行均值滤波;
代码实例:
1 des1=cv.blur(src,(9, 9))#均值滤波 2 des2 = Image.fromarray(cv.cvtColor(des1, cv.COLOR_BGR2RGB)) 3 font = ImageFont.truetype('simsun.ttc', 20) 4 # 文字输出位置 5 position = (5, 5) 6 # 输出内容 7 str = '均值滤波' 8 draw = ImageDraw.Draw(des2) 9 draw.text(position, str, font=font, fill=(255, 0, 0)) 10 des2 = cv.cvtColor(np.asarray(des2), cv.COLOR_RGB2BGR) 11 cv.imshow("des2", des2) 12 cv.waitKey(0);
运行效果:
(4)对原图像进行中值滤波;
代码实例:
1 med=cv.medianBlur(src,7)#7为孔径的尺寸 2 med1 = Image.fromarray(cv.cvtColor(med, cv.COLOR_BGR2RGB)) 3 font = ImageFont.truetype('simsun.ttc', 20) 4 # 文字输出位置 5 position = (5, 5) 6 # 输出内容 7 str = '中值滤波' 8 draw = ImageDraw.Draw(med1) 9 draw.text(position, str, font=font, fill=(255, 0, 0)) 10 med1 = cv.cvtColor(np.asarray(med1), cv.COLOR_RGB2BGR) 11 cv.imshow("med1", med1) 12 cv.waitKey(0);
运行效果图:
(5)对原图像进行高斯滤波;
代码实例:
1 gaussimg=cv.GaussianBlur(src,(5,5),0,0)#(5,5))----高斯内核大小,其中ksize.width和ksize.height可以不同,但是必须为正数和奇数,也可为零,均有sigma计算而来。0,0表示高斯函数在X,y方向的标准偏差 2 gaussimg1 = Image.fromarray(cv.cvtColor(gaussimg, cv.COLOR_BGR2RGB)) 3 font = ImageFont.truetype('simsun.ttc', 20) 4 # 文字输出位置 5 position = (5, 5) 6 # 输出内容 7 str = '高斯滤波' 8 draw = ImageDraw.Draw(gaussimg1) 9 draw.text(position, str, font=font, fill=(255, 0, 0)) 10 gaussimg1 = cv.cvtColor(np.asarray(gaussimg1), cv.COLOR_RGB2BGR) 11 cv.imshow("gaussimg1", gaussimg1) 12 cv.waitKey(0);
运行效果:
(6)对原图像进行高斯边缘检测;
代码实例:
1 gaussedge = cv.cvtColor(src,cv.COLOR_BGR2GRAY) #灰度图像 2 gaussedge = cv.GaussianBlur(gaussedge,(5,5),0) #高斯模糊 3 gaussedge1 = cv.Canny(gaussedge,75,200) 4 gaussedge2 = Image.fromarray(cv.cvtColor(gaussedge1, cv.COLOR_BGR2RGB)) 5 font = ImageFont.truetype('simsun.ttc', 20) 6 # 文字输出位置 7 position = (5, 5) 8 # 输出内容 9 str = '高斯边缘检测' 10 draw = ImageDraw.Draw(gaussedge2) 11 draw.text(position, str, font=font, fill=(0, 255, 0)) 12 gaussedge2 = cv.cvtColor(np.asarray(gaussedge2), cv.COLOR_RGB2BGR) 13 cv.imshow("gaussedge2", gaussedge2) 14 cv.waitKey(0);
运行效果:
虽然得到的结果都在网上找的不过希望这可以作为一个合集可以给初学的我们带来一点点的帮助。