日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv 其他形态学变换

發(fā)布時(shí)間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv 其他形态学变换 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 如何使用OpenCV函數(shù)?morphologyEx?進(jìn)行形態(tài)學(xué)操作:
    • 開運(yùn)算 (Opening)
    • 閉運(yùn)算 (Closing)
    • 形態(tài)梯度 (Morphological Gradient)
    • 頂帽 (Top Hat)
    • 黑帽(Black Hat)

原理

Note

?

以下內(nèi)容來自于Bradski和Kaehler的大作?Learning OpenCV?。

前一節(jié)我們討論了兩種最基本的形態(tài)學(xué)操作:

  • 腐蝕 (Erosion)
  • 膨脹 (Dilation)

運(yùn)用這兩個(gè)基本操作,我們可以實(shí)現(xiàn)更高級(jí)的形態(tài)學(xué)變換。這篇文檔將會(huì)簡要介紹OpenCV提供的5種高級(jí)形態(tài)學(xué)操作:

開運(yùn)算 (Opening)

  • 開運(yùn)算是通過先對(duì)圖像腐蝕再膨脹實(shí)現(xiàn)的。

  • 能夠排除小團(tuán)塊物體(假設(shè)物體較背景明亮)

  • 請(qǐng)看下面,左圖是原圖像,右圖是采用開運(yùn)算轉(zhuǎn)換之后的結(jié)果圖。 觀察發(fā)現(xiàn)字母拐彎處的白色空間消失。

閉運(yùn)算(Closing)

  • 閉運(yùn)算是通過先對(duì)圖像膨脹再腐蝕實(shí)現(xiàn)的。

  • 能夠排除小型黑洞(黑色區(qū)域)。

形態(tài)梯度(Morphological Gradient)

  • 膨脹圖與腐蝕圖之差

  • 能夠保留物體的邊緣輪廓,如下所示:

頂帽(Top Hat)

  • 原圖像與開運(yùn)算結(jié)果圖之差

黑帽(Black Hat)

  • 閉運(yùn)算結(jié)果圖與原圖像之差

源碼

下面是本教程的源碼, 你也可以從?這里?下載。

#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <stdlib.h> #include <stdio.h>using namespace cv;/// 全局變量 Mat src, dst;int morph_elem = 0; int morph_size = 0; int morph_operator = 0; int const max_operator = 4; int const max_elem = 2; int const max_kernel_size = 21;char* window_name = "Morphology Transformations Demo";/** 回調(diào)函數(shù)申明 */ void Morphology_Operations( int, void* );/** @函數(shù) main */ int main( int argc, char** argv ) {/// 裝載圖像src = imread( argv[1] );if( !src.data ){ return -1; }/// 創(chuàng)建顯示窗口namedWindow( window_name, CV_WINDOW_AUTOSIZE );/// 創(chuàng)建選擇具體操作的 trackbarcreateTrackbar("Operator:\n 0: Opening - 1: Closing \n 2: Gradient - 3: Top Hat \n 4: Black Hat", window_name, &morph_operator, max_operator, Morphology_Operations );/// 創(chuàng)建選擇內(nèi)核形狀的 trackbarcreateTrackbar( "Element:\n 0: Rect - 1: Cross - 2: Ellipse", window_name,&morph_elem, max_elem,Morphology_Operations );/// 創(chuàng)建選擇內(nèi)核大小的 trackbarcreateTrackbar( "Kernel size:\n 2n +1", window_name,&morph_size, max_kernel_size,Morphology_Operations );/// 啟動(dòng)使用默認(rèn)值Morphology_Operations( 0, 0 );waitKey(0);return 0;}/** * @函數(shù) Morphology_Operations */ void Morphology_Operations( int, void* ) {// 由于 MORPH_X的取值范圍是: 2,3,4,5 和 6int operation = morph_operator + 2;Mat element = getStructuringElement( morph_elem, Size( 2*morph_size + 1, 2*morph_size+1 ), Point( morph_size, morph_size ) );/// 運(yùn)行指定形態(tài)學(xué)操作morphologyEx( src, dst, operation, element );imshow( window_name, dst );}

解釋

  • 看一下程序的總體流程:

    • 裝載圖像

    • 創(chuàng)建顯示形態(tài)學(xué)操作的窗口

    • 創(chuàng)建3個(gè)trackbar獲取用戶參數(shù):

      • 第一個(gè)trackbar?“Operator”?返回用戶選擇的形態(tài)學(xué)操作類型 (morph_operator).

        createTrackbar("Operator:\n 0: Opening - 1: Closing \n 2: Gradient - 3: Top Hat \n 4: Black Hat",window_name, &morph_operator, max_operator,Morphology_Operations );
      • 第二個(gè)trackbar?“Element”?返回?morph_elem, 指定內(nèi)核形狀:

        createTrackbar( "Element:\n 0: Rect - 1: Cross - 2: Ellipse", window_name,&morph_elem, max_elem,Morphology_Operations );
      • 第三個(gè)trackbar?“Kernel Size”?返回內(nèi)核大小(morph_size)

        createTrackbar( "Kernel size:\n 2n +1", window_name,&morph_size, max_kernel_size,Morphology_Operations );
    • 每當(dāng)任一標(biāo)尺被移動(dòng), 用戶函數(shù)?Morphology_Operations?就會(huì)被調(diào)用,該函數(shù)獲取trackbar的當(dāng)前值運(yùn)行指定操作并更新顯示結(jié)果圖像。

      /** * @函數(shù) Morphology_Operations */ void Morphology_Operations( int, void* ) {// 由于 MORPH_X的取值范圍是: 2,3,4,5 和 6int operation = morph_operator + 2;Mat element = getStructuringElement( morph_elem, Size( 2*morph_size + 1, 2*morph_size+1 ), Point( morph_size, morph_size ) );/// 運(yùn)行指定形態(tài)學(xué)操作morphologyEx( src, dst, operation, element );imshow( window_name, dst );}

      運(yùn)行形態(tài)學(xué)操作的核心函數(shù)是?morphologyEx?。在本例中,我們使用了4個(gè)參數(shù)(其余使用默認(rèn)值):

      • src?: 原 (輸入) 圖像
      • dst: 輸出圖像
      • operation: 需要運(yùn)行的形態(tài)學(xué)操作。 我們有5個(gè)選項(xiàng):
        • Opening: MORPH_OPEN : 2
        • Closing: MORPH_CLOSE: 3
        • Gradient: MORPH_GRADIENT: 4
        • Top Hat: MORPH_TOPHAT: 5
        • Black Hat: MORPH_BLACKHAT: 6

      你可以看到, 它們的取值范圍是 <2-6>, 因此我們要將從tracker獲取的值增加(+2):

      int operation = morph_operator + 2;
      • element: 內(nèi)核,可以使用函數(shù):get_structuring_element:getStructuringElement <>?自定義。
  • 結(jié)果

    • 在編譯上面的代碼之后, 我們可以運(yùn)行結(jié)果,將圖片路徑輸入。這里使用圖像:?baboon.png:

    • 這里是顯示窗口的兩個(gè)截圖。第一幅圖顯示了使用交錯(cuò)內(nèi)核和?開運(yùn)算?之后的結(jié)果, 第二幅圖顯示了使用橢圓內(nèi)核和?黑帽?之后的結(jié)果。

    總結(jié)

    以上是生活随笔為你收集整理的opencv 其他形态学变换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 91久久精品国产91性色tv | 日本免费一区二区在线 | 69视频网 | 福利国产在线 | 久久久久亚洲AV成人 | 男生和女生一起搞鸡 | 2018天天干天天操 | 国产中文一区二区 | 欧美视频在线观看 | 欧洲一区二区在线观看 | 国产精伦 | 欧美性www| 天堂а√在线中文在线新版 | free性满足hd国产精品久 | 欧美另类自拍 | 在线色资源| 四季av在线一区二区三区 | 男人天堂怡红院 | 国产精品中文字幕在线 | 免费观看一级视频 | 成人午夜免费在线 | 男人用嘴添女人下身免费视频 | 福利在线一区 | 欧美女优在线观看 | 日在线视频| 男人深夜网站 | 日韩精品小视频 | 欧美一区二区三区四区在线观看 | 免费亚洲精品 | 欧美日a| 96国产精品 | 精品国产视频一区二区三区 | 亚洲图片小说区 | 国产特黄大片aaaa毛片 | 女人张开双腿让男人捅 | 日日色综合| 久热精品视频在线播放 | 爱福利视频一区 | 午夜怡红院 | 韩国裸体网站 | 黑丝一区二区三区 | 91视频在线观看免费 | 134vcc影院免费观看 | 日本xxxxxxxxx69| 免费av国产 | 射射av| 国产日韩欧美一区二区东京热 | 黄色精品一区 | 人妻无码中文字幕免费视频蜜桃 | 亚洲一区二区电影网 | 91区国产 | 国产黄色片免费观看 | 4438x五月天 日吊视频 | 国产成人精品视频在线观看 | 尤物在线| 免费国产 | 人妻av中文系列 | 国产成人精品片 | 男男在线观看 | 九九九视频在线观看 | 你懂的视频网站 | 国产农村妇女精品一二区 | 日韩精品成人一区二区在线 | 51国产在线 | 黄色网络在线观看 | japanese中文字幕 | 找av导航 | 日韩欧美在线免费 | www.毛片com| 按摩毛片 | 午夜久久久久久 | 日韩欧美国产一区二区三区 | 欧美亚洲国产另类 | 国产中文欧美日韩在线 | 精品三区视频 | 日韩精品视频在线观看免费 | 亚洲国产一区在线 | 无码人妻丰满熟妇精品区 | 中文字幕一区二区视频 | 一级黄色网址 | 淫久久| 91欧美日韩麻豆精品 | www.chengren| 香蕉免费在线视频 | 日本人妻伦在线中文字幕 | 免费视频久久久 | 韩国女主播裸体摇奶 | 欧美午夜精品一区 | 美女视频黄色在线观看 | 青娱乐国产视频 | 韩国毛片一区二区三区 | 三级三级久久三级久久18 | 色婷婷婷婷 | 特大黑人巨交吊性xxxx视频 | 另类综合网 | 久久亚洲综合色图 | 国产日韩欧美一二三区 | 色播av| 欧美一二三区在线观看 |