Python+OpenCV实现图像边缘提取、图像滤波功能

在Jupyter Notebook上使用Python实现下述代码的边缘提取、图像滤波功能,这个过程中实现某些功能处理出来的图像可能会有点粗糙。关于opencv库的安装可以参考:Python下opencv库的安装过程与一些问题汇总

一、边缘提取

import cv2#导入opencv库

#读取原灰度图片
image=cv2.imread("test.bmp")
cv2.imshow("image", image)#将原图片命名为“image”显示出来

#图像的阈值分割处理,即将图像处理成非黑即白的二值图像
ret,image1 = cv2.threshold(image, 80, 255, cv2.THRESH_BINARY)  # binary(黑白二值),ret代表阈值,80是低阈值,255是高阈值
cv2.imshow(‘image1‘, image1)#将阈值分割处理后的图片命名为“image1”显示出来

#二值图像的反色处理,将图片像素取反
height,width = image1.shape #返回图片大小
image2 = image1.copy()
for i in range(height):
    for j in range(width):
        image2[i,j] = (255-image1[i,j])
cv2.imshow(‘image2‘, image2)#将反色处理后的图片命名为“image2”显示出来

#边缘提取,使用Canny函数
image2_3 = cv2.Canny(image2,80,255) #设置80为低阈值,255为高阈值
cv2.imshow(‘image2_3‘, image2_3)#将边缘提取后的图片命名为“image2_3”显示出来

#再次对图像进行反色处理使提取的边缘为黑色,其余部分为白色,方法同image2
height1,width1 = image2_3.shape
image3 = image2_3.copy()
for i in range(height1):
    for j in range(width1):
        image3[i,j] = (255-image2_3[i,j])
cv2.imshow(‘image3‘, image3)#将边缘提取后反色处理的图片命名为“image3”显示出来
cv2.waitKey(0)# 等待键盘输入,不输入则无限等待
cv2.destroyAllWindows()  #销毁所有窗口

运行结果:

二、图像滤波

import cv2
import numpy
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw, ImageFont

#用于给图片添加中文字符
def ImgText_CN(img, text, left, top, textColor=(0, 255, 0), textSize=20):
    if (isinstance(img, numpy.ndarray)):  #判断是否为OpenCV图片类型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    draw = ImageDraw.Draw(img)
    fontText = ImageFont.truetype("font/simhei.ttf", textSize, encoding="utf-8")
    draw.text((left, top), text, textColor, font=fontText)
return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)

#读取原灰度图片
src=cv2.imread("test2.bmp")
cv2.imshow("src", src)#将原图片命名为“src”显示出来
src_cn=ImgText_CN(src, "原图像", 5, 5, (255, 0, 0), 20)
cv2.imshow("src_cn", src_cn)#将添加文字的src命名为“src_cn”并显示出来
# 均值滤波
des = cv2.blur(src, (5,5))
cv2.imshow("des", des)#将均值滤波处理后的src命名为“des”并显示出来
des_cn=ImgText_CN(des, "均值滤波", 5, 5, (255, 0, 0), 20)
cv2.imshow("des_cn", des_cn)#将添加文字的des命名为“des_cn”并显示出来
# 中值滤波
med = cv2.medianBlur(src, 5)
cv2.imshow("med", med)#将中值滤波处理后的src命名为“med”并显示出来
med_cn=ImgText_CN(med, "中值滤波", 5, 5, (255, 0, 0), 20)
cv2.imshow("med_cn", med_cn)#将添加文字的med命名为“med_cn”并显示出来
# 高斯滤波
gauss = cv2.GaussianBlur(src,(5,5),0)
cv2.imshow("gauss", gauss)#将高斯滤波处理后的src命名为“gauss”并显示出来
gauss_cn=ImgText_CN(gauss, "高斯滤波", 5, 5, (255, 0, 0), 20)
cv2.imshow("gauss_cn", gauss_cn)#将添加文字的gauss命名为“gauss_cn”并显示出来
# 高斯边缘检测
gaussedge = cv2.Canny(gauss,0,50)
cv2.imshow("gaussedge", gaussedge)#将边缘检测处理后的gauss命名为“gaussedge”并显示出来
gaussedge_cn=ImgText_CN(gaussedge, "高斯边缘检测", 5, 5, (0, 255, 0), 20)
cv2.imshow("gaussedge_cn", gaussedge_cn)#将添加文字的gaussedge命名为“gaussedge_cn”并显示出来
cv2.waitKey(0)

运行结果:

原文地址:https://www.cnblogs.com/BIXIABUMO/p/12594654.html

时间: 2024-07-30 01:30:44

Python+OpenCV实现图像边缘提取、图像滤波功能的相关文章

python opencv:摄像头捕获图像

原文地址:https://www.cnblogs.com/wbyixx/p/12217418.html

Python+OpenCV图像处理(七)—— 滤波与模糊操作

过滤是信号和图像处理中基本的任务.其目的是根据应用环境的不同,选择性的提取图像中某些认为是重要的信息.过滤可以移除图像中的噪音.提取感兴趣的可视特征.允许图像重采样等等.频域分析将图像分成从低频到高频的不同部分.低频对应图像强度变化小的区域,而高频是图像强度变化非常大的区域.在频率分析领域的框架中,滤波器是一个用来增强图像中某个波段或频率并阻塞(或降低)其他频率波段的操作.低通滤波器是消除图像中高频部分,但保留低频部分.高通滤波器消除低频部分.参考博客:https://blog.csdn.net

python+opencv实现机器视觉基础技术(边缘提取,图像滤波,边缘检测算子,投影,车牌字符分割)

目录 一:边缘提取 1.对图像进行阈值分割并反色 2.边缘提取 二:图像滤波 1.读取原图 2.均值滤波 3.中值滤波 4.高斯滤波 5.高斯边缘检测 三:边缘检测算子 1.显示原图 2.对图像进行反色 3.对图像用sobel方法进行边缘检测 4.对图像用robert方法进行边缘检测 四:投影 1.显示原图 2.垂直方向投影 3.水平方向投影 五:车牌字符分割 1.读取原图 2.灰度转换 3.反色 4.阈值分割 5.投影 6.字符识别匹配分割 ??机器视觉是人工智能正在快速发展的一个分支.简单说

OpenCV Python教程(1、图像的载入、显示和保存)

本文转载自 OpenCV Python教程(1.图像的载入.显示和保存)     作者 Daetalus 本文是OpenCV  2 Computer Vision Application Programming Cookbook读书笔记的第一篇.在笔记中将以Python语言改写每章的代码. PythonOpenCV的配置这里就不介绍了. 注意,现在OpenCV for Python就是通过NumPy进行绑定的.所以在使用时必须掌握一些NumPy的相关知识! 图像就是一个矩阵,在OpenCV fo

【OpenCV】5种图像滤波辨析:方框、均值、高斯、中值、双边

图像滤波 什么是图像滤波 图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性.(摘自网络) 图像滤波的目的 1,消除图像中混入的噪声 2,为图像识别抽取出图像特征 图像滤波的要求 1,不能损坏图像轮廓及边缘 2,图像视觉效果应当更好 滤波器的定义 滤波器,顾名思义,是对波进行过滤的器件.(摘自网络) 以上的定义是针对物理器件的,但对于图像滤波而言显然也是适用的. 大家都用过放大镜,这里就

opencv中的meanshift图像切割

Meanshift(均值漂移)是一种在一组数据的密度分布中寻找局部极值的稳定的方法.Meanshift不仅能够用于图像滤波,视频跟踪,还能够用于图像切割. 通过给出一组多维数据点,其维数是(x,y,r,g,b),均值漂移能够用一个窗体扫描空间来找到数据密度最大的区域,能够理解为数据分布最集中的区域. 在这里须要注意,因为空间位置(也就是上面的x和y)的变化范围与颜色的变化范围(上面的r,g,b)有极大的不同,所以,meanshift对这两个维数要採用不同的窗体半径.在opencv自带的means

图像卷积与滤波的一些知识点(转)

图像卷积与滤波的一些知识点 [email protected] http://blog.csdn.net/zouxy09 之前在学习CNN的时候,有对卷积进行一些学习和整理,后来就烂尾了,现在稍微整理下,先放上来,以提醒和交流. 一.线性滤波与卷积的基本概念 线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果.做法很简单.首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像.然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩

数学之路-python计算实战(8)-机器视觉-图像二值化

二值化 hreshold Applies a fixed-level threshold to each array element. C++: double threshold(InputArray src, OutputArray dst, double thresh, doublemaxval, int type) Python: cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst C: double cvThresh

OpenCV入门教程之五 图像直方图的应用

正如第4篇文章所说的图像直方图在特征提取方面有着很重要的作用,本文将举两个实际工程中非常实用的例子来说明图像直方图的应用. 一.直方图的反向映射 我们以人脸检测举例,在人脸检测中,我们第一步往往需要先提取图像中皮肤区域来缩小人脸的检测范围,这一般获得皮肤的颜色范围还需要定义阈值并不断的调整,实际中参数太多而不容易控制. 这里我们就可以考虑用直方图的反射映射. 1,收集人脸皮肤样本. 2,拼合样本并计算其颜色直方图. 3,将得到的样本颜色直方图反射映射到待检测的图片中,然后进行阈值化即可. 这里为