opencv: 形态学 转换(图示+源码)
来源:互联网 发布:淘宝卖家查看退款记录 编辑:程序博客网 时间:2024/05/01 15:41
综述
OpenCV中的形态学转换操作有七种:腐蚀,膨胀,开运算,闭运算,形态学梯度,礼帽,黑帽。
API参照表
实验思路:
- 写代码,实现OpenCV 自带的 七种形态学转换操作,并将生成的图片存入 pic 文件夹;
- 用 礼帽生成图 加上 开运算生成图,看看能否得到 原图,并将生成的图片存入 pic 文件夹;
- 用 闭运算生成图 减去 黑帽生成图,看看能否得到 原图,并将生成的图片存入 pic 文件夹;
- 如果成功,则验证自己的思路是正确的 。
Demo:
原始图像
(../pic/girl.jpg):
七种形态学转换操作
erode 腐蚀(../pic/erosion.jpg):
dilate 膨胀 (../pic/dilation.jpg):
open 开运算 (../pic/opening.jpg):
close 闭运算 (../pic/closing.jpg):
gradient 形态学梯度 (../pic/gradient.jpg):
tophat 礼帽 (../pic/tophat.jpg):
blackhat 黑帽 (../pic/blackhat.jpg):
通过转换后的图像得到原图像
cv2.add(open, tophat) cv2.add(开运算, 礼帽) (../pic/open_and_tophat.jpg):
close-blackhat 闭运算-黑帽 (../pic/close_subtract_blackhat.jpg):
附上自己写的实验代码:
# -*- coding: utf-8 -*-import cv2import numpy as npgirl_pic = cv2.imread('../pic/girl.jpg')kernel = np.ones((5, 5), np.uint8)# erode 腐蚀erosion = cv2.erode(src=girl_pic, kernel=kernel)cv2.imshow('erosion', erosion)cv2.waitKey(2000)cv2.destroyAllWindows()cv2.imwrite('../pic/erosion.jpg', erosion)# dilate 膨胀dilation = cv2.dilate(src=girl_pic, kernel=kernel)cv2.imshow('dilation', dilation)cv2.waitKey(2000)cv2.destroyAllWindows()cv2.imwrite('../pic/dilation.jpg', dilation)# open 开运算opening = cv2.morphologyEx(girl_pic, cv2.MORPH_OPEN, kernel)cv2.imshow('opening', opening)cv2.waitKey(2000)cv2.destroyAllWindows()cv2.imwrite('../pic/opening.jpg', opening)# close 闭运算closing = cv2.morphologyEx(girl_pic, cv2.MORPH_CLOSE, kernel)cv2.imshow('closing', closing)cv2.waitKey(2000)cv2.destroyAllWindows()cv2.imwrite('../pic/closing.jpg', closing)# gradient 形态学梯度gradient = cv2.morphologyEx(girl_pic, cv2.MORPH_GRADIENT, kernel)cv2.imshow('gradient', gradient)cv2.waitKey(2000)cv2.destroyAllWindows()cv2.imwrite('../pic/gradient.jpg', gradient)# tophat 礼帽tophat = cv2.morphologyEx(girl_pic, cv2.MORPH_TOPHAT, kernel)cv2.imshow('tophat', tophat)cv2.waitKey(2000)cv2.destroyAllWindows()cv2.imwrite('../pic/tophat.jpg', tophat)# blackhat 黑帽blackhat = cv2.morphologyEx(girl_pic, cv2.MORPH_BLACKHAT, kernel)cv2.imshow('blackhat', blackhat)cv2.waitKey(2000)cv2.destroyAllWindows()cv2.imwrite('../pic/blackhat.jpg', blackhat)# cv2.add(open, tophat) cv2.add(开运算, 礼帽)open_and_tophat = cv2.add(opening, tophat)cv2.imshow('open_and_tophat', open_and_tophat)cv2.waitKey(2000)cv2.destroyAllWindows()cv2.imwrite('../pic/open_and_tophat.jpg', open_and_tophat)# close-blackhat 闭运算-黑帽close_subtract_blackhat = closing - blackhatcv2.imshow('close_subtract_blackhat', close_subtract_blackhat)cv2.waitKey(2000)cv2.destroyAllWindows()cv2.imwrite('../pic/close_subtract_blackhat.jpg', close_subtract_blackhat)
实际遇到的问题及解决方法:
一开始设计实验时,用礼帽生成的图像加上开运算生成的图像能够得到原图,用黑帽生成的图像加上闭运算生成的图像却得不到原图,反而得到一张比闭运算图像更浅色的图片(如下):
想了一下,发现了问题所在:书上对黑帽的定义是:
进行闭运算之后得到的图像和原始图像的差
但是却没有说清楚被减数和减数分别是谁。根据闭运算和黑帽的定义,我觉得应该是:
黑帽 = 闭运算 - 原图
即可得:
原图 = 闭运算 - 黑帽
修改代码后进行验证,果然生成了原图像:
阅读全文
2 0
- opencv: 形态学 转换(图示+源码)
- OpenCV 中的形态学转换
- opencv 图像形态学转换
- opencv: 颜色空间转换(cv2.cvtColor) 探究(图示+源码)
- OpenCV-Python—形态学转换
- opencv-python(11):形态学转换
- python opencv入门 形态学转换(13)
- OpenCV学习笔记12-形态学转换
- opencv: 颜色通道 探究(图示+源码)
- opencv: Canny边缘检测(图示+源码)
- opencv: 轮廓绘制 详细拆解(图示+源码)
- opencv 形态学
- opencv形态学
- Opencv形态学滤波-形态学梯度
- opencv: 阈值处理(cv2.threshold) 探究(图示+源码)
- OpenCV形态学操作
- OpenCV学习笔记-形态学
- OPENCV之形态学处理
- Redux:百行代码千行文档
- hessian简单示例
- 会声会影X9中文版 v19.1.0.14
- Dubbo-02:使用zookeeper的简单demo
- C.Primer.Plus(第六版)第14章 编程练习
- opencv: 形态学 转换(图示+源码)
- JavaScript中隐式的强制转换
- TensorFlow概要
- C_串----基本string字符系列容器
- JNI编译时错误 编码GBK的不可映射字符 解决方法
- java设计模式之外观模式(门面模式) 针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。 一、概念介绍 外观模式(Facade),他隐藏了系统的复杂性,并
- tablayout加viewpager
- linux下安装mysql数据库
- 关于网站所有404页面替换为腾讯公益404页面的说明