日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产精品久久久久久久一区探花 | 伊在线久久丫 | 日本一道本在线 | 男人天堂手机在线 | 亚洲一区二区久久 | 噼里啪啦免费高清看 | 亚洲日本一区二区三区 | 成人看片 | 午夜xxxxx| 日本少妇高潮喷水xxxxxxx | 国产精品久久久久三级无码 | 久久a毛片 | 黄色免费网页 | 日日操日日爽 | 一区二区美女视频 | 在线观看国产一区二区 | 美女人人操 | 亚洲成人免费观看 | 日本熟妇成熟毛茸茸 | 成人免费在线电影 | 蜜桃av在线播放 | 久久综合伊人77777麻豆 | 欧美在线日韩在线 | 一本一道人人妻人人妻αv 九一在线视频 | 99网站| 国产剧情一区在线 | 亚洲911精品成人18网站 | 国产黄色片在线播放 | 一级特黄aa大片 | 午夜av影视 | 手机看片国产日韩 | 天天添 | 字幕网在线 | 麻豆成人久久精品一区二区三区 | 美女超碰 | 国产丝袜视频在线 | 射黄视频 | 日韩女优一区二区 | 日本高清免费看 | 国产一区二区小视频 | 亚洲综合另类小说 | 日本网站免费 | 超碰97国产精品人人cao | 亚洲成人激情av | 欧美韩日精品 | 国产成人精品无码片区在线 | 北岛玲一区二区 | 欧美日韩一区二区综合 | 久久国产福利 | 久久中文字幕一区二区 | 日韩最新在线 | 亚洲国产剧情在线观看 | 麻豆国产一区二区 | 免费在线观看不卡av | a在线免费 | 欧美午夜久久 | 在线日韩成人 | 中文字幕在线播放 | 日韩av网址大全 | 清纯唯美亚洲激情 | 国产妻精品一区二区在线 | 日韩αv| 中日韩男男gay无套 人人草人人干 | 天天插夜夜操 | 亚洲先锋影音 | 亚洲一区影视 | 国产99久久九九精品无码免费 | 黄色网址视频 | av网站大全免费 | 福利影院在线观看 | 春色激情 | 天堂视频网 | 亚洲精品99999| 五月天色婷婷丁香 | 日韩黄色一级视频 | 操操综合 | 亚洲av成人无码久久精品 | 成人高清视频在线观看 | 精品国产乱码久久久久久预案 | 欧美不卡在线 | 日韩成人午夜影院 | 久草国产视频 | 久热网站 | 丰满人妻综合一区二区三区 | 超碰视屏 | 国产麻豆午夜三级精品 | a免费在线观看 | 亚洲视频一区在线观看 | 天堂伊人网 | 亚洲国产mv | 在线观看黄色国产 | 欧美午夜精品久久久久久孕妇 | av福利在线免费观看 | 国产又黄又粗又猛又爽的视频 | 成年人看的羞羞网站 | 三级性生活视频 | 超碰黑人 | 欧美亚洲视频一区 | 91新视频 |