当前位置:网站首页>opencv之图像分割
opencv之图像分割
2022-07-07 05:49:00 【程序之巅】
原图:
最终分割得到的图:
def OpenCVSegmentation():
cv2.namedWindow('origin', cv2.WINDOW_NORMAL)
cv2.namedWindow('gray', cv2.WINDOW_NORMAL)
cv2.namedWindow('closed', cv2.WINDOW_NORMAL)
cv2.namedWindow('result', cv2.WINDOW_NORMAL)
cv2.namedWindow('binary', cv2.WINDOW_NORMAL)
cv2.namedWindow('DILATE', cv2.WINDOW_NORMAL)
cv2.namedWindow('ERODE', cv2.WINDOW_NORMAL)
img = cv2.imread("../data/imgs/20211126-Z2111001-4-1-1_0_1.png") # 载入图像
h, w = img.shape[:2] #获取图像的高和宽
#设置显示图片窗口大小
cv2.resizeWindow('origin', int(w / 3), int(h / 3))
cv2.resizeWindow('gray', int(w/3), int(h/3))
cv2.resizeWindow('closed', int(w/3), int(h/3))
cv2.resizeWindow('result', int(w/3), int(h/3))
cv2.resizeWindow('binary', int(w / 3), int(h / 3))
cv2.resizeWindow('DILATE', int(w / 3), int(h / 3))
cv2.resizeWindow('ERODE', int(w / 3), int(h / 3))
cv2.imshow("origin", img) #显示原始图像
# 滤波去噪
blured = cv2.blur(img,(3,3)) #进行滤波去掉噪声
# cv2.imshow("Blur", blured) #显示低通滤波后的图像
#得到灰度图
gray = cv2.cvtColor(blured,cv2.COLOR_BGR2GRAY)
cv2.imshow("gray", gray)
#定义结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(9, 9))
#开闭运算,先开运算去除背景噪声,再继续闭运算填充目标内的孔洞
opened = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel)
closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel)
cv2.imshow("closed", closed)
#求二值图
# ret, binary = cv2.threshold(closed,150,255,cv2.THRESH_BINARY)
# cv2.imshow("binary", binary)
# binary = cv2.adaptiveThreshold(closed, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 5)
binary = cv2.adaptiveThreshold(closed, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,31, 5)
cv2.imshow("binary", binary)
#膨胀
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
binary = cv2.morphologyEx(binary, cv2.MORPH_DILATE, kernel)
cv2.imshow("DILATE", binary)
#腐蚀
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 25))
binary = cv2.morphologyEx(binary, cv2.MORPH_ERODE, kernel)
cv2.imshow("ERODE", binary)
#找到轮廓
contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#绘制轮廓
cv2.drawContours(img,contours,-1,(0,0,255),3)
#绘制结果
cv2.imshow("result", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == "__main__":
OpenCVSegmentation()
参考文章:
OpenCV-Python图像形态变换概述及morphologyEx函数介绍
OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍
Python OpenCV morphologyEx()函数
边栏推荐
- GOLand idea intellij 无法输入汉字
- Snyk dependency security vulnerability scanning tool
- 2 - 3 arbre de recherche
- 关于基于kangle和EP面板使用CDN
- Snyk 依赖性安全漏洞扫描工具
- Openvscode cloud ide joins rainbow integrated development system
- The field value in Splunk subquery fuzzy matching CSV is*
- Practice of implementing cloud native Devops based on rainbow library app
- POJ - 3616 Milking Time(DP+LIS)
- Componentspace2022, assertions, protocols, bindings, and configuration files
猜你喜欢
随机推荐
Splunk查询csv lookup table数据动态查询
Snyk 依赖性安全漏洞扫描工具
【微信小程序:缓存操作】
Golang compilation constraint / conditional compilation (/ / +build < tags>)
数据中台落地实施之法
Rapid integration of authentication services - harmonyos platform
How to realize the high temperature alarm of the machine room in the moving ring monitoring system
Golang 编译约束/条件编译 ( // +build <tags> )
Splunk query CSV lookup table data dynamic query
You should use Google related products with caution
rsync远程同步
使用SwinUnet训练自己的数据集
GFS分布式文件系统
What is the method of manual wiring in PCB design in 22protel DXP_ Chengdu electromechanical Development Undertaking
Rainbow 5.7.1 supports docking with multiple public clouds and clusters for abnormal alarms
Appeler l'interface du moteur de création du service multimédia de jeu Huawei renvoie le Code d'erreur 1002, le message d'erreur: les paramètres sont l'erreur
Open3D ISS关键点
Data type - floating point (C language)
Using helm to install rainbow in various kubernetes
Input of mathematical formula of obsidan