OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)

本文主要是介绍OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)


目录

OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)

前言

环境

灰度图

模糊图片

GaussianBlur函数

提取边缘

边缘膨胀

边缘细化

整体对照

总结


前言

计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:

1、研究代码(慢,不稳定,独立并与其他库不兼容)
2、耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)
3、依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)这是如今的现状,而标准的API将简化计算机视觉程序和解决方案的开发,OpenCV致力于成为这样的标准API。

OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度。

故而我们选择学习OpenCV,我们来一步步的学习OpenCV。


环境

在这里我们不仅仅需要cv2的环境,还需要numpy的环境,故而需要我们单独安装一下:

pip install numpy

win的环境与CentOS的有些区别,是库的区别,我本地是华为的库,CentOS是CSDN库,都能用。

灰度图

这里需要引入numpy做计算,也就是kernel的卷积核。

import cv2
import numpy as np# 获取图片的数组
img = cv2.imread("800_600.jpg")
# 卷积核:一般用一个5行5列的全是1的数组
kernel = np.ones((5, 5), np.uint8)
# 生成灰度图
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 展示
cv2.imshow("Gray Image", imgGray)cv2.waitKey(0)

实际效果:灰度

模糊图片

代码:可以修改模糊的强度,是一个奇数,取值范围建议1~151的奇数,不然就啥也看不清了。

import cv2# 获取图片的数组
img = cv2.imread("800_600.jpg")
# 模糊图
imgBlur = cv2.GaussianBlur(img, (151, 151), 5)
# 展示
cv2.imshow("Gray Image", imgBlur)cv2.waitKey(0)

模糊效果

GaussianBlur函数

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。

语法:

dst=GaussianBlur(src,ksize,sigmaX [,dst [,sigmaY [,borderType]]])

参数:

src:图片

ksize:高斯内核大小。 ksize.width和ksize.height可以不同,但​​它们都必须为正数和奇数,也可以为零,然后根据sigma计算得出。

sigmaX:X方向上的高斯核标准偏差。

sigmaY:Y方向上的高斯核标准差;如果sigmaY为零,则将其设置为等于sigmaX;如果两个sigmas为零,则分别从ksize.width和ksize.height计算得出;为了完全控制结果,而不管将来可能对所有这些语义进行的修改,建议指定所有ksize,sigmaX和sigmaY。

import cv2# 获取图片的数组
img = cv2.imread("800_600.jpg")
# 模糊图
imgBlur = cv2.GaussianBlur(img, (151, 151), 3, 17)
# 展示
cv2.imshow("Gray Image", imgBlur)cv2.waitKey(0)

添加高斯核标准差效果:

提取边缘

代码:

import cv2# 获取图片的数组
img = cv2.imread("800_600.jpg")
# 边缘提取
imgCanny = cv2.Canny(img, 150, 200)
# 展示
cv2.imshow("imgCanny", imgCanny)cv2.waitKey(0)

有些像描边,可以用于扣除祛斑啥的这种单独的点点。

边缘膨胀

代码:

import cv2
import numpy as np# 获取图片的数组
img = cv2.imread("800_600.jpg")
kernel = np.ones((5, 5), np.uint8)
# 边缘提取
imgCanny = cv2.Canny(img, 150, 200)
# 膨胀边缘
imgDialation = cv2.dilate(imgCanny, kernel, iterations=1)
# 展示
cv2.imshow("imgCanny", imgCanny)
cv2.imshow("imgDialation", imgDialation)cv2.waitKey(0)

边缘膨胀,也就是强化了边缘。 

边缘细化

代码:

import cv2
import numpy as np# 获取图片的数组
img = cv2.imread("800_600.jpg")
kernel = np.ones((5, 5), np.uint8)
# 边缘提取
imgCanny = cv2.Canny(img, 150, 200)
# 膨胀边缘
imgDialation = cv2.dilate(imgCanny, kernel, iterations=1)
# 边缘细化
imgEroded = cv2.erode(imgDialation, kernel, iterations=1)
# 展示
cv2.imshow("imgCanny", imgCanny)
cv2.imshow("imgDialation", imgDialation)
cv2.imshow("imgEroded", imgEroded)cv2.waitKey(0)

实际效果: 

整体对照

总结

很多参数细节都是需要我们自己来根据实际需求来调整的,包括后期的AI循环也是一个参数一个参数的调整出来的结果,搞这个东西要细心与耐心缺一不可。

这篇关于OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/161989

相关文章

如何使用CSS3实现波浪式图片墙

《如何使用CSS3实现波浪式图片墙》:本文主要介绍了如何使用CSS3的transform属性和动画技巧实现波浪式图片墙,通过设置图片的垂直偏移量,并使用动画使其周期性地改变位置,可以创建出动态且具有波浪效果的图片墙,同时,还强调了响应式设计的重要性,以确保图片墙在不同设备上都能良好显示,详细内容请阅读本文,希望能对你有所帮助...

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Linux使用cut进行文本提取的操作方法

《Linux使用cut进行文本提取的操作方法》Linux中的cut命令是一个命令行实用程序,用于从文件或标准输入中提取文本行的部分,本文给大家介绍了Linux使用cut进行文本提取的操作方法,文中有详... 目录简介基础语法常用选项范围选择示例用法-f:字段选择-d:分隔符-c:字符选择-b:字节选择--c

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意