对硬币、销钉、大米进行图像分割(附代码)

  (1): coins.png

  1.采用OpenCv中cv2.cvtColor()函数将coins.png图片进行灰度处理,得到coins_gray:

coins_gray = cv2.cvtColor(coins, cv2.COLOR_RGB2GRAY)

  2.采用OpenCv中cv2.threshold()函数,带cv2.THRESH_OTSU(OTSU阈值法)参数,自适应对coins_gray阈值进行处理,获取二元值的灰度图像 :

ret,thresh=cv2.threshold(coins_gray,0,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)

  3.之后再轮廓检测:

cnts=cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[1]

  其中参数CV_RETR_EXTERNAL表示:只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略;参数CV_CHAIN_APPROX_SIMPLE表示:仅保存轮廓的拐点信息,把所有轮廓拐点处的点保存入contours向量内(也就是第二个返回值),拐点与拐点之间直线段上的信息点不予保留;

  4.计数提取出的边缘数即为硬币数,用循环将边缘的位置标在原图上画出并显示,记的数字显示在title中:

for i, contour in enumerate(cnts):
    cv2.drawContours(coins, cnts, -1, (0, 0, 255), 1)
cv2.imshow(str(len(cnts))+(" coins"), coins)
cv2.imwrite("coins_result.jpg", coins)

  其结果如下图1-1所示(左上角为其个数):

图1-1 coins硬币识别结果

  完整Python代码如下所示:

import cv2  
coins = cv2.imread('coins.png')  
coins_gray = cv2.cvtColor(coins, cv2.COLOR_RGB2GRAY)  
ret, thresh = cv2.threshold(coins_gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)  
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]  
for i, contour in enumerate(cnts):  
    cv2.drawContours(coins, cnts, -1, (0, 0, 255), 1)  
cv2.imshow(str(len(cnts))+(" coins"), coins)  
cv2.imwrite("coins_result.jpg", coins)  
cv2.waitKey(0)  
cv2.destroyAllWindows()  

  (2):Dowels.tiff

  最开始想用霍夫变换对其进行圆形检测,由于效果不好这里换另外一种方案,仍然对其进行基本的图像操作之后二值化图像,检测轮廓。对Dowels.tiff的分割与记数原理与coins.png的原理类似,不同之处在于对其进行mean-shift(均值漂移)滤波。之后进行灰度变换、阈值分割、检测轮廓,最后对其计数并显示出来。
  其结果如下图1-2所示(左上角为其个数):


图1-2 Dowels识别结果

  完整Python代码如下所示:

import cv2  
Dowels = cv2.imread('Dowels.tif')  
cv2.imshow("Dowels_origin", Dowels)  
# 进行mean—shift滤波  
mean_shift_Dowels= cv2.pyrMeanShiftFiltering(Dowels, sp=10, sr=100)  
gray = cv2.cvtColor(mean_shift_Dowels, cv2.COLOR_RGB2GRAY)  
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)  
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[1]  
for i, contour in enumerate(cnts):  
    cv2.drawContours(Dowels, cnts, i, (0, 0, 255), 1)  
cv2.imshow(str(len(cnts)) + " Dowels", Dowels)  
cv2.imwrite("Dowels_result.jpg", Dowels)  
cv2.waitKey(0)  
cv2.destroyAllWindows() 

  (3): rice.png

  对rice.png的分割与记数原理与coins.png的原理类似,主要不同在于图像存在噪声的干扰,需要将其进行一下滤波处理。先将其转化为灰度图像,再对其进行滤波处理,之后对其进行自适应阈值分割,利用cv2.findContours()函数寻找轮廓,最后对其记数,并展示出来。

  其结果如下图1-3所示(左上角为其个数):


图 1-3 rice大米识别结果

  完整Python代码如下所示:

from numpy import *  
import cv2  
rice = cv2.imread('rice.png')  
rice_gray = cv2.cvtColor(rice, cv2.COLOR_RGB2GRAY)  
# rice_gray_Blur = cv2.GaussianBlur(rice_gray,(5,5),1)  
# rice_gray_Blur = box = cv2.boxFilter(rice_gray,-1,(3,3), normalize=False)  
rice_gray_Blur = cv2.blur(rice_gray, (3, 3))  
ret,thresh=cv2.threshold(rice_gray_Blur.copy(), 1,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU) 
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]  
for i, contour in enumerate(cnts):  
    cv2.drawContours(rice, cnts, i, (0, 0, 255), 1)  
cv2.imshow(str(len(cnts))+ " rice", rice)  
cv2.waitKey(0)  
cv2.destroyAllWindows() 

  完整实验代码,公众号后台回复:数字图像作业二。

我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容