亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

OpenCV實現(xiàn)圖像距離變換

 更新時間:2021年06月23日 11:56:35   作者:我有一個夢想  
這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)圖像距離變換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

圖像中兩個像素之間的距離有多種定義方式,圖像處理中常用的距離有歐式距離、街區(qū)距離棋盤距離

歐式距離 略

街區(qū)距離

兩個像素點X方向和Y方向的距離之和。歐式距離表示的是從一個像素點到另一個像素點的最短距離,然而有時我們并不能以兩個點之間連線的方向前進,例如在一個城市內兩點之間的連線可能存在障礙物的阻礙,因此從一個點到另一個點需要沿著街道行走,因此這種距離的度量方式被稱為街區(qū)距離。街區(qū)距離就是由一個像素點到另一個像素點需要沿著X方向和Y方向一共行走的距離,數(shù)學表示形式如式所示。

棋盤距離

兩個像素點X方向距離和Y方向距離的最大值。與街區(qū)距離相似,棋盤距離也是假定兩個像素點之間不能夠沿著連線方向靠近,像素點只能沿著X方向和Y方向移動,但是棋盤距離并不是表示由一個像素點移動到另一個像素點之間的距離,而是表示兩個像素點移動到同一行或者同一列時需要移動的最大距離,數(shù)學表示形式如式所示。

CV_EXPORTS_AS(distanceTransformWithLabels) void distanceTransform( InputArray src, OutputArray dst,
                                     OutputArray labels, int distanceType, int maskSize,
                                     int labelType = DIST_LABEL_CCOMP );
  • src:輸入圖像,數(shù)據(jù)類型為CV_8U的單通道圖像
  • dst:輸出圖像,與輸入圖像具有相同的尺寸,數(shù)據(jù)類型為CV_8U或者CV_32F的單通道圖像。
  • labels:二維的標簽數(shù)組(離散Voronoi圖),與輸入圖像具有相同的尺寸,數(shù)據(jù)類型為CV_32S的單通道數(shù)據(jù)。
  • distanceType:選擇計算兩個像素之間距離方法的標志,其常用的距離度量方法在表6-1給出。
  • maskSize:距離變換掩碼矩陣的大小,參數(shù)可以選擇的尺寸為DIST_MASK_3(3×3)和DIST_MASK_5(5×5).
  • labelType:要構建的標簽數(shù)組的類型,可以選擇的參數(shù)在表給出。 

  • 該函數(shù)用于實現(xiàn)圖像的距離變換,即統(tǒng)計圖像中所有像素距離0像素的最小距離。
  • 函數(shù)的第一個參數(shù)為待距離變換的輸入圖像,輸入圖像要求必須是CV_8U的單通道圖像。
  • 函數(shù)第二個參數(shù)是原圖像距離變換后的輸出圖像,與輸入圖像具有相同的尺寸,圖像中每個像素值表示該像素在原圖像中距離0像素的最小距離。由于圖像的尺寸可能大于256,因此圖像中某個像素距離0像素的最近距離有可能會大于255,為了能夠正確的統(tǒng)計出每一個像素距離0像素的最小距離,輸出圖像的數(shù)據(jù)類型可以選擇CV_8U或者CV_32F。
  • 函數(shù)第三個參數(shù)是原圖像的Voronoi圖,輸出圖像是數(shù)據(jù)類型為CV_32S單通道圖像,圖像尺寸與輸入圖像相同。
  • 函數(shù)第四個參數(shù)是距離變換過程中使用的距離種類,常用的距離為歐式距離(DIST_L2)、街區(qū)距離(DIST_L1)和棋盤距離(DIST_C)。
  • 函數(shù)第五個參數(shù)是求取路徑時候的掩碼尺寸,該尺寸與選擇的距離種類有著密切的關系,當選擇使用街區(qū)距離時,掩碼尺寸選擇3×3還是5×5對計算結果都沒有影響,因此為了加快函數(shù)運算速度,默認選擇掩碼尺寸為3×3;當選擇歐式距離時,掩碼尺寸為3×3時是粗略的計算兩個像素之間的距離,而當掩碼尺寸為5×5時是精確的計算兩個像素之間的距離,精確計算與粗略計算兩者之間存在著較大的差異,因此在使用歐式距離時推薦使用5×5掩碼;當選擇棋盤距離時,掩碼的尺寸對計算結果也沒有影響,因此可以隨意選擇。
  • 函數(shù)的最后一個參數(shù)為構建標簽數(shù)組的類型,當labelTypeDIST_LABEL_CCOMP時,該函數(shù)會自動在輸入圖像中找到0像素的連通分量,并用不同的標簽標記它們。當labelTypeDIST_LABEL_CCOMP時,該函數(shù)掃描輸入圖像并用不同的標簽標記所有0像素。

該函數(shù)原型在對圖像進行距離變換的同時會生成Voronoi圖,但是有時只是為了實現(xiàn)對圖像的距離變換,并不需要使用Voronoi圖,而使用該函數(shù)必須要求創(chuàng)建一個Mat類變量用于存放Voronoi圖,占用了內存資源,因此distanceTransform()函數(shù)的第二種函數(shù)原型中取消了生成Voronoi圖,只輸出距離變換后的圖像

void distanceTransform( InputArray src, OutputArray dst,
            int distanceType, int maskSize, int dstType=CV_32F); 
  • src:輸入圖像,數(shù)據(jù)類型為CV_8U的單通道圖像
  • dst:輸出圖像,與輸入圖像具有相同的尺寸,數(shù)據(jù)類型為CV_8U或者CV_32F的單通道圖像。
  • distanceType:選擇計算兩個像素之間距離方法的標志,其常用的距離度量方法在表6-1給出。
  • maskSize:距離變換掩碼矩陣的大小,參數(shù)可以選擇的尺寸為DIST_MASK_3(3×3)和DIST_MASK_5(5×5)。
  • dstType:輸出圖像的數(shù)據(jù)類型,可以是CV_8U或者CV_32F。

該函數(shù)原型中的主要參數(shù)含義與前一種函數(shù)原型相同,前兩個參數(shù)為輸入圖像和輸出圖像,第三個參數(shù)和為距離變換過程中使用的距離種類。函數(shù)中第四個參數(shù)是距離變換掩碼矩陣的大小,由于街區(qū)距離(Dist_L1)和棋盤距離(Dist_C)對掩模尺寸沒有要求,因此該參數(shù)在選擇街區(qū)距離和棋盤距離時被強制設置為3,同樣掩模尺寸的大小對歐式距離(Dist_L2)計算的精度有影響,為了獲取較為精確的時,一般使用5×5的掩模矩陣。函數(shù)最后一個參數(shù)是輸出圖像的數(shù)據(jù)類型,雖然可以在CV_8U和CV_32F兩個類型中任意選擇,但是圖像輸出時實際的數(shù)據(jù)類型與距離變換時選擇的距離種類有著密切的聯(lián)系,CV_8U只能使用在計算街區(qū)距離的條件下,當計算歐式距離和棋盤距離時,即使該參數(shù)設置為CV_8U,實際的輸出圖像的數(shù)據(jù)類型也是CV_32F。

簡單示例 

//
// Created by smallflyfly on 2021/6/15.
//
 
#include "opencv2/opencv.hpp"
#include "opencv2/highgui.hpp"
#include "utils.hpp"
 
#include <iostream>
 
using namespace std;
using namespace cv;
 
int main() {
 
    // 自定義矩陣
    Mat a = (Mat_<uchar>(5, 5) <<
            1,1,1,1,1,
            1,1,1,1,1,
            1,1,0,1,1,
            1,1,1,1,1,
            1,1,1,1,1
            );
    Mat distL1, distL2, distC;
    distanceTransform(a, distL1, DIST_L1, 3, CV_8U);
    distanceTransform(a, distL2, DIST_L2, 5, CV_8U);
    distanceTransform(a, distC, DIST_C, 3, CV_8U);
 
    cout << distL1 << endl;
    cout << distL2 << endl;
    cout << distC << endl;
 
    Mat im = imread("test.jpg", IMREAD_GRAYSCALE);
    if (im.empty()) {
        cerr << "image file read error" << endl;
        return -1;
    }
    resize(im, im, Size(0, 0), 0.5, 0.5);
 
    // 轉為二值圖像
    Mat im1, im2;
    threshold(im, im1, 125 ,255, THRESH_BINARY);
    threshold(im, im2, 125, 255, THRESH_BINARY_INV);
 
    Mat dist1, dist2;
    distanceTransform(im1, dist1, DIST_L1, 3, CV_32F);
    distanceTransform(im2, dist2, DIST_L1, 3, CV_8U);
 
    showImage("im1", im1);
    showImage("dist1", dist1);
    showImage("im2", im2);
    showImage("dist2", dist2);
 
    waitKey(0);
    destroyAllWindows();
 
    return 0;
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • c++ 有趣的動態(tài)轉換

    c++ 有趣的動態(tài)轉換

    這篇文章主要介紹了c++ 動態(tài)轉換的相關資料,幫助大家更好的理解和使用c++編程,感興趣的朋友可以了解下
    2020-09-09
  • VScode配置C語言環(huán)境完整版(親測可用)

    VScode配置C語言環(huán)境完整版(親測可用)

    這篇文章主要介紹了VScode配置C語言環(huán)境完整版,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • C語言內存泄露很嚴重的解決方案

    C語言內存泄露很嚴重的解決方案

    這篇文章主要介紹了C語言內存泄露很嚴重的解決方案,預防內存泄漏問題有多種方法,比如加強代碼檢視、工具檢測和內存測試等,下面文章總結內容需要的小伙伴可以參考一下
    2022-05-05
  • 利用Matlab編寫簡易版連連看小游戲

    利用Matlab編寫簡易版連連看小游戲

    連連看作為經(jīng)典的小游戲,一定是很多人的回憶吧。本文將用Matlab實現(xiàn)這一經(jīng)典的游戲,文中示例代碼具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 使用QGraphicsView實現(xiàn)氣泡聊天窗口+排雷功能

    使用QGraphicsView實現(xiàn)氣泡聊天窗口+排雷功能

    這篇文章主要介紹了使用QGraphicsView實現(xiàn)氣泡聊天窗口+排雷,重點給大家介紹使用QWebEngineView控件內嵌html+CSS的實現(xiàn)方式,需要的朋友可以參考下
    2022-04-04
  • 淺析C++模板類型中的原樣轉發(fā)和可變參數(shù)的實現(xiàn)

    淺析C++模板類型中的原樣轉發(fā)和可變參數(shù)的實現(xiàn)

    可變參數(shù)模板(variadic templates)是C++11新增的強大的特性之一,它對模板參數(shù)進行了高度泛化,能表示0到任意個數(shù)、任意類型的參數(shù),這篇文章主要介紹了C++可變參數(shù)模板的展開方式,需要的朋友可以參考下
    2022-08-08
  • Opencv透視變換綜合實例詳解

    Opencv透視變換綜合實例詳解

    這篇文章主要為大家詳細介紹了Opencv透視變換綜合實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C語言對組文件處理的相關函數(shù)小結

    C語言對組文件處理的相關函數(shù)小結

    這篇文章主要介紹了C語言對組文件處理的相關函數(shù)小結,包括setgrent()函數(shù)和getgrent()函數(shù)以及endgrent()函數(shù),需要的朋友可以參考下
    2015-08-08
  • Qt學習教程之對話框消失動畫效果

    Qt學習教程之對話框消失動畫效果

    這篇文章主要給大家介紹了關于Qt學習教程之對話框消失動畫效果的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • 使用C++制作簡單的web服務器

    使用C++制作簡單的web服務器

    本文給大家分享的是使用C++簡單實現(xiàn)web服務器的代碼,雖然非常的簡陋,功能也很少,主要是為了更好的理解WEB服務器的工作原理,推薦給大家,也希望對大家能夠有所幫助。
    2015-03-03

最新評論