真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

這篇文章主要為大家展示了“C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割”這篇文章吧。

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)鎮(zhèn)巴免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

圖像分割

圖像分割,英文名image segmentation,就是把圖像分成若干個特定的、具有獨特性質(zhì)的區(qū)域并提出感興趣目標(biāo)的技術(shù)和過程。它是由圖像處理到圖像分析的關(guān)鍵步驟?,F(xiàn)有的圖像分割方法主要分以下幾類:

  • 基于閾值的分割方法

  • 基于區(qū)域的分割方法

  • 基于邊緣的分割方法以及基于特定理論的分割方法

從數(shù)學(xué)角度來看,圖像分割是將數(shù)字圖像劃分成互不相交的區(qū)域的過程。圖像分割的過程也是一個標(biāo)記過程,即把屬于同一區(qū)域的像索賦予相同的編號。

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

  • 圖像分割的目標(biāo)是將圖像中像素根據(jù)一定的規(guī)則分為若干個(N)個cluster集合,I每個集合包含一類像素。

  • 根據(jù)算法分為監(jiān)督學(xué)習(xí)算法和無監(jiān)督學(xué)習(xí)算法,圖像分割的算法多數(shù)都是無監(jiān)督學(xué)習(xí)算法。---KMeans

距離變換與分水嶺介紹

距離變換

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

距離變換常見算法有兩種

  • 不斷膨脹/ 腐蝕得到

  • 基于倒角距離

分水嶺變換

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

分水嶺變換常見的算法

基于浸泡理論實現(xiàn)

相關(guān)API

        cv::distanceTransform(

                InputArray  src, 

                OutputArray dst,  

                OutputArray  labels,  

                int  distanceType,  

                int maskSize,  

                int labelType = DIST_LABEL_CCOMP

        )

distanceType = DIST_L1/DIST_L2,

maskSize = 3x3,最新的支持5x5,推薦3x3、

labels離散維諾圖輸出,

dst輸出8位或者32位的浮點數(shù),單一通道,大小與輸入圖像一致

        cv::watershed(

                InputArray image, 

                InputOutputArray  markers

        )

操作步驟

  1. 將白色背景變成黑色-目的是為后面的變換做準(zhǔn)備

  2. 使用filter2D與拉普拉斯算子實現(xiàn)圖像對比度提高,sharp

  3. 轉(zhuǎn)為二值圖像通過threshold

  4. 距離變換

  5. 對距離變換結(jié)果進(jìn)行歸一化到[0~1]之間

  6. 使用閾值,再次二值化,得到標(biāo)記

  7. 腐蝕得到每個Peak - erode

  8. 發(fā)現(xiàn)輪廓 – findContours

  9. 繪制輪廓- drawContours

  10. 分水嶺變換 watershed

  11. 對每個分割區(qū)域著色輸出結(jié)果

代碼演示

新建一個項目opencv-0027,配置屬性(VS2017配置OpenCV通用屬性),然后在源文件寫入#include和main方法

這次我們用opencv里面自帶的一張圖像來實個這個方法

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

運行顯示的圖像為

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

1.將白色背景變成黑色

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

我們運行看一下

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

可以看到右邊的已經(jīng)把背景都換為黑色了。

2.使用filter2D與拉普拉斯算子實現(xiàn)圖像對比度提高,sharp

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

我們再運行看一下,左邊的就是生成的結(jié)果圖,可以看出左邊的清晰度更高了一些

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

3.轉(zhuǎn)為二值圖像通過threshold

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

我們再運行看一下,左邊的圖像已經(jīng)讓我們轉(zhuǎn)換為二值圖像了,也比較清晰

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

4.距離變換

5.對距離變換結(jié)果進(jìn)行歸一化到[0~1]之間

因為距離變換看不出任何效果,所以我們把4和5兩步放在一起顯示

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

我們再運行一下看看執(zhí)行結(jié)果

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

6.使用閾值,再次二值化,得到標(biāo)記

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

顯示效果為

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

7.腐蝕得到每個Peak

效果不太好看,我們需要再進(jìn)行二值的腐蝕,把上面的代碼再修改一下

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

我們再看一下運行效果,可以看出來比剛才的效果好很多了

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

8.標(biāo)記并且開始查找輪廓

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

這一步只是查找輪廓,我們接下來繪制查找的輪廓再一起顯示出來

9.繪制輪廓

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

上面drawContours和circle最后一個參數(shù)都是用了-1,代表著畫的輪廓里面進(jìn)行顏色填充

我們再顯示一下看看效果

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

看到好像什么也沒有,這是因為我們畫的輪廓太小了, 我們改一下顯示效果

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

把最后顯示cv::imshow(imgdst,makers*5000)再乘5000,重新看一下顯示效果

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

這會兒就可以看到繪制的輪廓出來了

10.分水嶺變換

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

我們看看顯示的效果

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

可以看出,每個輪廓都有明顯的區(qū)分開了。

11.對每個分割區(qū)域著色輸出結(jié)果

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

然后我們再運行看到最后結(jié)果

C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割

以上是“C++ OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


本文名稱:C++OpenCV如何實現(xiàn)基于距離變換與分水嶺的圖像分割
當(dāng)前鏈接:http://weahome.cn/article/pcdpij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部