1263
文章
980893
访问
暂无分类
暂无标签
2023-06(1)
发布于2020-09-28 21:45 阅读(2250) 评论(0) 点赞(17) 收藏(2)
1、阈值分割
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
-
-
- """
- 使用函数cv2.threshold()进行简单的阈值处理
- 函数原型为:threshold(src, thresh, maxval, type[, dst]) -> retval, dst
- 返回值
- retval:当前用来对像素值进行分类的低阈值,默认情况下和参数thresh相等
- dst:二值化处理后的图像,像素值中只存在0或255
- 参数解析:
- src:需要二值化的原图像,必须是灰度图,传入一种彩色图没有意义;
- thresh:用来对像素值进行分类的阈值;
- maxval:就是当像素值高于,有时是小于阈值时应该被赋予的新的像素值;
- type:阈值处理方式,OpenCV提供多种阈值处理方法
- cv2.THRESH_BINARY:超过阈值部分取maxval(最大值),否则取0
- cv2.THRESH_BINARY_INV :THRESH_BINARY的反转
- cv2.THRESH_TRUNC :大于阈值部分设为阈值,否则不变
- cv2.THRESH_TOZERO :大于阈值部分不改变,否则设为0
- cv2.THRESH_TOZERO_INV :THRESH_TOZERO的反转
- """
-
- import cv2
-
- '1. 初始操作'
- src = cv2.imread("Resources/threshold.png", 17)
- img = src.copy()
-
- '2. 灰度化——cvtColor()参数含义:1)原图 2)目标颜色空间,例如 RGB->HSV'
- gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
- cv2.imshow("gray", gray)
-
- '3. 阈值分割(二值化)——threshold()参数含义:1)8位图像(灰度图) 2)比较阈值 3)输出值 4)分割属性'
- '返回值函数: ret=比较阈值 thresh=二值化图像(矩阵数组)'
- ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
- print(ret)
-
- '4. 完成显示'
- cv2.imshow("src Image", src)
- cv2.imshow("thresh Image", thresh)
- cv2.waitKey()
2、腐蚀与膨胀,开运算与闭运算
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
-
-
- """
- 腐蚀操作:
- 原理:
- 比如使用一个3X3的全一矩阵去腐蚀一张灰度图,中心锚点的值就会被替换为对应核中最小的值
- 原始数据:
- [[100 127 127 127 127]
- [127 127 127 127 127]
- [127 127 127 127 127]
- [127 127 127 100 127]
- [127 127 127 127 127]]
- ************************************************************
- 腐蚀之后的数据
- [[100 100 127 127 127]
- [100 100 127 127 127]
- [127 127 100 100 100]
- [127 127 100 100 100]
- [127 127 100 100 100]]
- erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst
- 参数解析:
- kernel:腐蚀操作的内核。 可以使用函数getStructuringElement()。
- anchor:默认为-1表示内核中心点,省略时为默认值
- iterations:腐蚀次数。省略时为默认值1
- borderType:推断边缘类型,具体参见borderInterpolate函数。默认值为边缘值拷贝
- borderValue:边缘填充值,具体可参见createMorphoogyFilter函数,可省略,默认为0
- dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst
- 参数解析:
- anchor:默认为Point(-1,-1),内核中心点。省略时为默认值。
- iterations:膨胀次数。省略时为默认值1。
- borderType:推断边缘类型,具体参见borderInterpolate函数。默认为BORDER_DEFAULT, 边缘拷贝
- borderValue:边缘值,具体可参见createMorphoogyFilter函数。可省略。
- """
-
- '''
- 腐蚀与膨胀
- '''
- # import cv2
- #
- # '1. 初始操作'
- # src = cv2.imread("Resources/otsu_src.jpg", 17)
- #
- # '2. 获得形态学变换的【结构元】——ELLIPSE=椭圆形 RECT=矩形 CROSS=交叉形'
- # kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
- #
- # '3. 腐蚀——erode()参数含义:1)原图 2)结构元 iterations=次数'
- # er = cv2.erode(src, kernel, iterations=1)
- #
- # '4. 膨胀——dilate()参数含义:1)原图 3)结构元 iterations=次数'
- # di = cv2.dilate(er, kernel, iterations=1)
- #
- # '5. 完成显示'
- # cv2.imshow("src Image", src)
- # cv2.imshow("erode Image", er)
- # cv2.imshow("dilate Image", di)
- # cv2.waitKey(0)
-
- ######################################################
-
- '''
- 开操作与闭操作
- 开操作 = 腐蚀 + 膨胀 消除部分高亮区域(二值化中的白色区域)
- 闭操作 = 膨胀 + 腐蚀 消除高亮区域的内部黑洞(二值化中的黑色区域)
- '''
- import cv2
-
- '1. 初始操作'
- src = cv2.imread("Resources/open.png", 0)
- img = src.copy()
-
- '2. 二值化——threshold'
- ret, thresh = cv2.threshold(src, 127, 255, cv2.THRESH_BINARY)
- cv2.imshow('thresh', thresh)
-
- '3. 获取形态学变换结构元——RECT=矩形'
- kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))
-
- '4. 形态学变换函数——morphologyEx()参数含义:1)原图 2)变换属性(开/关操作、礼帽、梯度等) 3)结构元 '
- open = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel, iterations=2)
- # op_erode = cv2.erode(src, kernel, iterations=1)
- # open = cv2.dilate(op_erode, kernel, iterations=1)
-
- '5. 完成显示'
- cv2.imshow("Src Image ", img)
- cv2.imshow("MORPH_OPEN Image", open)
- cv2.waitKey(0)
3、硬币检测与计数的应用实现
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
-
-
- """
- 项目主题:硬币检测和计数的设计与实现
- """
- import cv2
- import numpy as np
-
-
- def stackImages(scale, imgArray):
- """
- 将多张图像压入同一个窗口显示
- :param scale:float类型,输出图像显示百分比,控制缩放比例,0.5=图像分辨率缩小一半
- :param imgArray:元组嵌套列表,需要排列的图像矩阵
- :return:输出图像
- """
- rows = len(imgArray)
- cols = len(imgArray[0])
- rowsAvailable = isinstance(imgArray[0], list)
- width = imgArray[0][0].shape[1]
- height = imgArray[0][0].shape[0]
- if rowsAvailable:
- for x in range(0, rows):
- for y in range(0, cols):
- if imgArray[x][y].shape[:2] == imgArray[0][0].shape[:2]:
- imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
- else:
- imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]),
- None, scale, scale)
- if len(imgArray[x][y].shape) == 2: imgArray[x][y] = cv2.cvtColor(imgArray[x][y], cv2.COLOR_GRAY2BGR)
- imageBlank = np.zeros((height, width, 3), np.uint8)
- hor = [imageBlank] * rows
- hor_con = [imageBlank] * rows
- for x in range(0, rows):
- hor[x] = np.hstack(imgArray[x])
- ver = np.vstack(hor)
- else:
- for x in range(0, rows):
- if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
- imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
- else:
- imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None, scale, scale)
- if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
- hor = np.hstack(imgArray)
- ver = hor
- return ver
-
-
- '1. 初始操作'
- src = cv2.imread("Resources/coin2.jpg")
- img = src.copy()
-
- '2. 图像预处理——灰度化'
- gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
-
- '3. 图像预处理——二值化'
- ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
-
- '4. 图像预处理——消除特有噪声(形态学变换)'
- # kernel = np.ones((3, 3), np.uint8)
- kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
- dilate = cv2.morphologyEx(thresh, cv2.MORPH_DILATE, kernel, iterations=2)
- opening = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel, iterations=3)
-
- '根据距离变换的性质,经过简单的运算,即可用于细化字符的轮廓和查找物体质心(中心)。'
- '5. 寻找前景区域——分离连接物体distanceTranform()参数含义:1)二值图像 2)距离变换类型 3)距离变换的掩膜模板'
- # DIST_L2:简单欧几里得距离 Δ = sqrt((x1 - x2)² + (y1 - y2)²)
- dist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 3)
-
- '6. 找到未知区域'
- ret, sure_fg = cv2.threshold(dist_transform, 0.5 * dist_transform.max(), 255, 0)
- print(ret)
- sure_fg = np.uint8(sure_fg)
-
- '7. 找到硬币中心(轮廓查找)findContours()参数含义:1)8位图像 2)轮廓查找模式 3)查找近似方法'
- contours, hierarchy = cv2.findContours(sure_fg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[-2:]
-
- '8. 绘制硬币中心(轮廓绘制)drawContours()参数含义:1)原图 2)轮廓点坐标 3)轮廓索引 4)线条颜色 5)线条粗细'
- cv2.drawContours(img, contours, -1, (0, 0, 255), 3)
-
- '9. 完成显示'
- '''
- *知识点回顾:
- putText()参数含义:1)图像 2)需显示的文本 3)坐标 4)文本字体 5)文本尺寸百分比 6)文本颜色 7)文本粗细
- '''
- cv2.putText(img, "count:{}".format(len(contours)), (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0), 3)
- cv2.putText(src, "srcImg", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0), 3)
- cv2.putText(gray, "gray", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 255, 255), 3)
- cv2.putText(thresh, "thresh", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 255, 255), 3)
- cv2.putText(opening, "open", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 255, 255), 3)
- cv2.putText(sure_fg, "fg", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 255, 255), 3)
-
- imgStack = stackImages(0.7, ([src, gray, thresh], [opening, sure_fg, img]))
- cv2.imshow("imgStack", imgStack)
- cv2.waitKey(0)
原文链接:https://blog.csdn.net/weixin_45602979/article/details/108831760
程序员说:42岁了,突然觉得研发前途渺茫
中国程序员数量达755万,全球排名第二
为什么都说程序员找不到女朋友,但是身边程序猿的却没一个单身的?
程序员说:30岁以上你还死磕技术,别说拿高薪,可能你连饭碗都会保不住
程序员被开除,老板:“有你参与的项目全黄了!”
笑话:一个测试工程师走进一家酒吧
笑话:面试官:请拿出一段体现你水平的代码。我: sudo rm -rf /*面试官:这体现了你哪方面能力?
python精选:Python 办公实战!按姓名拆分 Excel 为单独文件,微信自动发给相应联系人
网友说:做开发,不被领导喜欢怎么办?
网友说:我奉劝各位,一定不能在职场透露自己的家庭条件
作者: 滴水
链接: https://www.pythonheidong.com/blog/article/551450/c282479e13168c62caff/
来源: python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!
关于本站/关于站长
深圳SEO优化公司光明网络营销荆州百度网站优化公司松原高端网站设计推荐塘坑seo网站优化哪家好襄樊网站优化推广报价沈阳网站推广工具哪家好渭南网络广告推广公司崇左企业网站建设多少钱烟台外贸网站制作价格萍乡网站优化按天扣费价格十堰建站价格黔南设计网站报价黔南英文网站建设多少钱中山关键词按天计费价格汉中关键词排名包年推广多少钱朝阳企业网站改版多少钱荷坳关键词按天收费哪家好怀化网页设计多少钱大鹏关键词按天计费兰州优化报价池州外贸网站制作推荐张掖推广网站黄南百度seo报价黄山高端网站设计推荐河池推广网站报价玉溪网站seo优化郴州网络推广哪家好海东英文网站建设价格坑梓seo优化公司昭通百姓网标王推广推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运