色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenCV兩種不同方法實(shí)現(xiàn)粘連大米分割計(jì)數(shù)

新機(jī)器視覺 ? 來(lái)源:OpenCV與AI深度學(xué)習(xí) ? 2024-01-22 14:55 ? 次閱讀

背景介紹

測(cè)試圖如下,圖中有個(gè)別米粒相互粘連,本文主要演示如何使用OpenCV用兩種不同方法將其分割并計(jì)數(shù)。

a3382ca8-b76b-11ee-8b88-92fbcf53809c.png

方法一:基于分水嶺算法

基于分水嶺算法分割步驟如下:

【1】高斯濾波 + 二值化 +開運(yùn)算

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray,(5,5),0)
ret, binary= cv2.threshold(gray, 115, 255, cv2.THRESH_BINARY)

kernel = np.ones((5, 5), np.uint8)
binary=cv2.morphologyEx(binary,cv2.MORPH_OPEN,kernel,iterations=1)
cv2.imshow('thres', binary)

a35c9bba-b76b-11ee-8b88-92fbcf53809c.png

【2】距離變換 + 提取前景

dist = cv2.distanceTransform(binary, cv2.DIST_L2, 3)
dist_out = cv2.normalize(dist, 0, 1.0, cv2.NORM_MINMAX)
cv2.imshow('distance-Transform', dist_out * 100)
ret, surface = cv2.threshold(dist_out, 0.35*dist_out.max(), 255, cv2.THRESH_BINARY)
cv2.imshow('surface', surface)
sure_fg = np.uint8(surface)# 轉(zhuǎn)成8位整型
cv2.imshow('Sure foreground', sure_fg)

a36cca8a-b76b-11ee-8b88-92fbcf53809c.png

a37e309a-b76b-11ee-8b88-92fbcf53809c.png

【3】標(biāo)記位置區(qū)域

# 未知區(qū)域標(biāo)記為0
markers[unknown == 255] = 0
kernel = np.ones((5, 5), np.uint8)
binary = cv2.morphologyEx(binary, cv2.MORPH_DILATE, kernel, iterations=1)
unknown = binary - sure_fg
cv2.imshow('unknown',unknown)

a396b1f6-b76b-11ee-8b88-92fbcf53809c.png

【4】分水嶺算法分割

markers = cv2.watershed(img, markers=markers)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(markers)

【5】輪廓查找和標(biāo)記

contours,hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
forcntincontours:
        M = cv2.moments(cnt)
        cx = int(M['m10']/M['m00'])
        cx = int(M['m10']/M['m00'])
        cy = int(M['m01']/M['m00'])#輪廓重心
        cv2.drawContours(img,contours,-1,colors[rd.randint(0,5)],2)
        cv2.drawMarker(img, (cx,cy),(0,255,0),1,8,2)

a3a984a2-b76b-11ee-8b88-92fbcf53809c.png

方法二:輪廓凸包缺陷方法

基于輪廓凸包缺陷分割步驟如下:

【1】高斯濾波 + 二值化 +開運(yùn)算

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray,(5,5),0)
ret, binary= cv2.threshold(gray, 115, 255, cv2.THRESH_BINARY)

kernel=np.ones((5,5),np.uint8)
binary=cv2.morphologyEx(binary,cv2.MORPH_OPEN,kernel,iterations=1)
cv2.imshow('thres', binary)

a35c9bba-b76b-11ee-8b88-92fbcf53809c.png

【2】輪廓遍歷 + 篩選輪廓含有凸包缺陷的輪廓

contours,hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
for cnt in contours:
    hull = cv2.convexHull(cnt,returnPoints=False)#默認(rèn)returnPoints=True
    defects = cv2.convexityDefects(cnt,hull)
    #print defects
    pt_list = []
    if defects is not None:
        flag = False
        for i in range(0,defects.shape[0]):
            s,e,f,d = defects[i,0]
            if d > 4500:
                flag = True

a3d70634-b76b-11ee-8b88-92fbcf53809c.png

【3】將距離d最大的兩個(gè)凸包缺陷點(diǎn)連起來(lái),將二值圖中對(duì)應(yīng)的粘連區(qū)域分割開,紅色圓標(biāo)注為分割開的部分

    if len(pt_list) > 0:
cv2.line(binary,pt_list[0],pt_list[1],0,2)
cv2.imshow('binary2',binary)
a3eca9b2-b76b-11ee-8b88-92fbcf53809c.png

a3f9a180-b76b-11ee-8b88-92fbcf53809c.png

【4】重新查找輪廓并標(biāo)記結(jié)果

contours,hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
for cnt in contours:
    try:
        M = cv2.moments(cnt)
        cx = int(M['m10']/M['m00'])
        cx = int(M['m10']/M['m00'])
        cy = int(M['m01']/M['m00'])#輪廓重心
         
        cv2.drawContours(img,cnt,-1,colors[rd.randint(0,5)],2)
        cv2.drawMarker(img, (cx,cy),(0,0,255),1,8,2)
    except:
        pass

a40c807a-b76b-11ee-8b88-92fbcf53809c.png






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 高斯濾波
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    8085
  • OpenCV
    +關(guān)注

    關(guān)注

    31

    文章

    635

    瀏覽量

    41461

原文標(biāo)題:實(shí)戰(zhàn) | OpenCV兩種不同方法實(shí)現(xiàn)粘連大米分割計(jì)數(shù)(步驟 + 代碼)

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    測(cè)量開關(guān)電源轉(zhuǎn)換效率的兩種同方法

    本文將向大家介紹測(cè)量開關(guān)電源轉(zhuǎn)換效率的兩種同方法
    發(fā)表于 08-09 16:45 ?4654次閱讀
    測(cè)量開關(guān)電源轉(zhuǎn)換效率的<b class='flag-5'>兩種</b>不<b class='flag-5'>同方法</b>

    兩種LED驅(qū)動(dòng)模式的功能及使用方法

    中穎MCU普通LED模塊(非恒流)提供了兩種LED驅(qū)動(dòng)模式:亮滅模式、調(diào)光模式。兩種模式的功能及使用方法簡(jiǎn)介如下。
    發(fā)表于 08-26 11:18 ?3678次閱讀

    新的粘連字符圖像分割方法

    新的粘連字符圖像分割方法針對(duì)監(jiān)控畫面采樣圖像中數(shù)字的自動(dòng)識(shí)別問題,提出一新的粘連字符圖像
    發(fā)表于 09-19 09:19

    兩種verilog語(yǔ)言寫法的實(shí)現(xiàn)問題!求解答~

    在看verilog代碼時(shí),看到這樣兩種表示方法:一是:“ wirea;assigna=b;”一是:“wirea=b;”請(qǐng)教各位大神這兩種
    發(fā)表于 01-29 14:33

    二值化圖像后分割粘連的區(qū)域如何分割

    `二值化圖像粘連后如果是圓形的物體可以使用分水嶺或找圓進(jìn)行分割。如果是其它形狀如橢圓或圖中形狀如何分割請(qǐng)教高手幫忙`
    發(fā)表于 03-31 22:46

    兩種使用C#實(shí)現(xiàn)ADSL自動(dòng)撥號(hào)的方法

    在網(wǎng)絡(luò)編程中,有時(shí)候會(huì)需要重新?lián)芴?hào)建立網(wǎng)絡(luò)連接(如Ad點(diǎn)擊軟件通過重新?lián)芴?hào)形成有效點(diǎn)擊) ,下面介紹兩種程序中撥號(hào)的方法.
    發(fā)表于 07-12 06:33

    基于LabVIEW的Modbus協(xié)議兩種校驗(yàn)碼的實(shí)現(xiàn)方法

    基于LabVIEW的Modbus協(xié)議兩種校驗(yàn)碼的實(shí)現(xiàn)方法 介紹基于LabVIEW的Modbus協(xié)議兩種校驗(yàn)碼的實(shí)現(xiàn)
    發(fā)表于 10-13 00:08 ?4441次閱讀
    基于LabVIEW的Modbus協(xié)議<b class='flag-5'>兩種</b>校驗(yàn)碼的<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>方法</b>

    基于ADI的UHF RFID讀卡器射頻前端的兩種實(shí)現(xiàn)方法解析

    本文介紹基于ADI公司的信號(hào)鏈的UHF RFID讀卡器射頻前端的兩種實(shí)現(xiàn)方法
    發(fā)表于 10-25 16:00 ?3312次閱讀
    基于ADI的UHF RFID讀卡器射頻前端的<b class='flag-5'>兩種</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>方法</b>解析

    單片機(jī)系統(tǒng)實(shí)現(xiàn)延時(shí)的兩種方法解析

    實(shí)現(xiàn)延時(shí)通常有兩種方法:一是硬件延時(shí),要用到定時(shí)器/計(jì)數(shù)器,這種方法可以提高CPU的工作效率,也能做到精確延時(shí);另一
    發(fā)表于 01-24 17:06 ?1.4w次閱讀
    單片機(jī)系統(tǒng)<b class='flag-5'>實(shí)現(xiàn)</b>延時(shí)的<b class='flag-5'>兩種方法</b>解析

    Multibool的兩種實(shí)現(xiàn)方法詳細(xì)資料介紹

    介紹了Multibool的兩種實(shí)現(xiàn)方法。通過Xilinx Spartan-6 FPGA的Multiboot特性,允許用戶一次將多個(gè)配置文件下載入Flash中,根據(jù)不同時(shí)刻的需求,在不掉電重啟的情況下,從中選擇一個(gè)來(lái)重配置FPGA
    發(fā)表于 01-10 08:00 ?2次下載

    兩種線路板分割的方式及多層線路板具體分割方法

    下面就為大家介紹兩種線路板分割的方式以及多層線路板具體分割方法
    發(fā)表于 07-25 11:06 ?6098次閱讀

    片機(jī)實(shí)現(xiàn)延時(shí)的兩種方法

    來(lái)源:大魚機(jī)器人 第一篇 實(shí)現(xiàn)延時(shí)通常有兩種方法:一是硬件延時(shí),要用到定時(shí)器/計(jì)數(shù)器,這種方法可以提高CPU的工作效率,也能做到精確延時(shí);
    的頭像 發(fā)表于 09-11 14:29 ?3099次閱讀

    PCI設(shè)備兩種底層訪問方法實(shí)現(xiàn)及比較分析

    介紹了在VB開發(fā)環(huán)境下,對(duì)PCI設(shè)備進(jìn)行底層訪問的兩種方法:一是通過用用戶自己編寫的動(dòng)態(tài)連接庫(kù)(DLL)實(shí)現(xiàn),二是利用WINDRIVER提供的VB運(yùn)行庫(kù)編寫直接訪問硬件接口函數(shù),并對(duì)兩種方法
    的頭像 發(fā)表于 10-04 17:25 ?3346次閱讀
    PCI設(shè)備<b class='flag-5'>兩種</b>底層訪問<b class='flag-5'>方法</b>的<b class='flag-5'>實(shí)現(xiàn)</b>及比較分析

    單片機(jī)實(shí)現(xiàn)延時(shí)兩種方法

    實(shí)現(xiàn)延時(shí)通常有兩種方法:一是硬件延時(shí),要用到定時(shí)器/計(jì)數(shù)器,這種方法可以提高CPU的工作效率,也能做到精確延時(shí);另一
    發(fā)表于 11-04 15:36 ?12次下載
    單片機(jī)<b class='flag-5'>實(shí)現(xiàn)</b>延時(shí)<b class='flag-5'>兩種方法</b>

    opencv實(shí)戰(zhàn)——機(jī)器視覺檢測(cè)和計(jì)數(shù)

    由于之前網(wǎng)購(gòu)的維生素片,有時(shí)候忘了今天有沒有吃過,就想對(duì)瓶子里的藥片計(jì)數(shù)...在學(xué)習(xí)opencv以后,希望實(shí)現(xiàn)對(duì)于維生素片分割計(jì)數(shù)算法。本次
    的頭像 發(fā)表于 03-03 11:54 ?2054次閱讀
    主站蜘蛛池模板: 国产精品久久久久激情影院 | 美国CERANETWORK超清 | 伊人影院蕉久 | 国产盗摄一区二区 | 凌馨baby| 青青草视频在线ac | 国精产品999一区二区三区有限 | 久久香蕉国产线看观看精品 | 少妇无码吹潮久久精品AV网站 | 丝袜美女被啪啪不带套漫画 | 亚洲人成电影网站在线观看 | 欧美成ee人免费视频 | 色综合久久天天影视网 | 久久无码av三级 | 国产高清美女一级毛片久久 | 7m凹凸国产刺激在线视频 | 草草久久久亚洲AV成人片 | 無码一区中文字幕少妇熟女H | 91热久久免费精品99 | 国产AV国片精品无套内谢无码 | 好吊妞国产欧美日韩视频 | 亚洲精品久久久久久偷窥 | 伊人色啪啪天天综合婷婷 | 中文字幕不卡在线视频 | 爱暖暖1000部免费 | 视频一区国产第一页 | 乡土女性网动态图解 | 寂寞护士中文字幕 mp4 | 色AV色婷婷96人妻久久久 | 无码人妻丰满熟妇啪啪网不卡 | 恋夜影院支持安卓视频美女 | 日韩亚洲中文欧美在线 | 国产成人女人视频在线观看 | 久久亚洲AV成人无码国产漫画 | 岛国大片在线观看完整版 | 最新老头恋老OLDMAN | 蜜柚视频网在线观看免费 | 伊人影院久久 | 色综合a在线 | 女同给老师下媚药 | 欧美丰满熟妇无码XOXOXO |