最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

opencv求解區(qū)域的內(nèi)接矩形

 更新時間:2020年07月21日 09:24:13   作者:cfqcfqcfqcfqcfq  
這篇文章主要為大家詳細介紹了opencv求解區(qū)域的內(nèi)接矩形,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

實驗室項目中,希望求取一個近似圓形區(qū)域的質(zhì)心,原本使用最小外接圓的質(zhì)心來等效為該區(qū)域質(zhì)心。但是由于部分區(qū)域的形狀過于不規(guī)則導致發(fā)生質(zhì)心偏移現(xiàn)象。如下圖:

藍色為實際要求質(zhì)心。紅色為等效圓質(zhì)心

為獲取較為準確的質(zhì)心,擬用最大內(nèi)接矩形的中心作為該區(qū)域質(zhì)心。

采用改進的中心擴散法求內(nèi)接矩形:先以最小外接矩的中心作為算法的起點進行中心擴散。得到一個內(nèi)解矩形,在對最小外接矩的中心進行8鄰域的遍歷,應用中心擴散法分別求取內(nèi)接矩,以面積最大的內(nèi)接矩作為最大內(nèi)接矩。

使用Opencv關(guān)鍵代碼如下:

/**
 * @brief 求取連通區(qū)域內(nèi)接矩
 * @param img:輸入圖像,單通道二值圖,深度為8
 * @param center:最小外接矩的中心
 * @return 最大內(nèi)接矩形
 * 基于中心擴展算法
 */
cv::Rect InSquare(Mat &img,const Point center)
{
  // --[1]參數(shù)檢測
  if(img.empty()||
      img.channels()>1
      ||img.depth()>8)
    return Rect();
  //[1]
 
  // --[2] 初始化變量
  int edge[4];
  edge[0]=center.y+1;//top
  edge[1]=center.x+1;//right
  edge[2]=center.y-1;//bottom
  edge[3]=center.x-1;//left
  //[2]
 
  // --[3]邊界擴展(中心擴散法)
  bool EXPAND[4]={1,1,1,1};//擴展標記位
  int n=0;
  while (EXPAND[0]||EXPAND[1]||EXPAND[2]||EXPAND[3])
  {
    int edgeID=n%4;
    EXPAND[edgeID]=expandEdge(img,edge,edgeID);
 
    n++;
  }
  //[3]
 
  qDebug()<<edge[0]<<edge[1]<<edge[2]<<edge[3];
  Point tl=Point(edge[3],edge[0]);
  Point br=Point(edge[1],edge[2]);
  return Rect(tl,br);
}
 
/**
 * @brief expandEdge 擴展邊界函數(shù)
 * @param img:輸入圖像,單通道二值圖,深度為8
 * @param edge 邊界數(shù)組,存放4條邊界值
 * @param edgeID 當前邊界號
 * @return 布爾值 確定當前邊界是否可以擴展
 */
bool expandEdge(const Mat & img, int edge[], const int edgeID)
{
  //[1] --初始化參數(shù)
  int nc=img.cols;
  int nr=img.rows;
 
  switch (edgeID) {
  case 0:
    if(edge[0]>nr)
      return false;
    for(int i=edge[3];i<=edge[1];++i)
    {
      if(img.at<uchar>(edge[0],i)==0)
        return false;
    }
    edge[0]++;
    return true;
    break;
  case 1:
    if(edge[1]>nc)
      return false;
    for(int i=edge[2];i<=edge[0];++i)
    {
      if(img.at<uchar>(i,edge[1])==0)
        return false;
    }
    edge[1]++;
    return true;
    break;
  case 2:
    if(edge[2]<0)
      return false;
    for(int i=edge[3];i<=edge[1];++i)
    {
      if(img.at<uchar>(edge[2],i)==0)
        return false;
    }
    edge[2]--;
    return true;
    break;
  case 3:
    if(edge[3]<0)
      return false;
    for(int i=edge[2];i<=edge[0];++i)
    {
      if(img.at<uchar>(i,edge[3])==0)
        return false;
    }
    edge[3]--;
    return true;
    break;
  default:
    return false;
    break;
  }
}

效果:

黑色為內(nèi)接矩中心,紅色為最小外接圓中心

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

相關(guān)文章

  • DevC++如何自定義頭文件并使用

    DevC++如何自定義頭文件并使用

    文章介紹了如何在DevC++中自定義頭文件并使用,首先創(chuàng)建一個項目,然后新建一個頭文件并編寫代碼,保存后創(chuàng)建一個源文件并將其放在項目目錄下
    2024-11-11
  • C++實現(xiàn)簡單計算器功能

    C++實現(xiàn)簡單計算器功能

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C++的new和delete詳解

    C++的new和delete詳解

    這篇文章主要介紹的是C++的new和delete,可以這么理解 new相當于是malloc 、delete相當于是free,下面我們就來詳情介紹,,需要的朋友可以參一考
    2021-09-09
  • C語言實現(xiàn)簡單圖書管理系統(tǒng)

    C語言實現(xiàn)簡單圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • VSCode配置C/C++環(huán)境的最新詳細教程

    VSCode配置C/C++環(huán)境的最新詳細教程

    VisualStudioCode(簡稱VSCode)是Microsoft開發(fā)的代碼編輯器,它支持Windows,Linux和macOS等操作系統(tǒng)以及開源代碼,下面這篇文章主要給大家介紹了關(guān)于VSCode配置C/C++環(huán)境的最新詳細教程,需要的朋友可以參考下
    2022-12-12
  • 淺談時間戳與日期時間互轉(zhuǎn)C語言

    淺談時間戳與日期時間互轉(zhuǎn)C語言

    下面小編就為大家?guī)硪黄獪\談時間戳與日期時間互轉(zhuǎn)C語言。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • C++ 操作系統(tǒng)內(nèi)存分配算法的實現(xiàn)詳解

    C++ 操作系統(tǒng)內(nèi)存分配算法的實現(xiàn)詳解

    本文主要介紹了在動態(tài)分區(qū)管理方式下采用不同的分配算法實現(xiàn)主存分配和實現(xiàn)主存回收,旨在幫助學生理解在動態(tài)分區(qū)管理方式下應怎樣實現(xiàn)主存空間的分配和回收。感興趣的可以了解一下
    2021-11-11
  • 詳解如何將Spire.Doc for C++集成到C++程序中

    詳解如何將Spire.Doc for C++集成到C++程序中

    Spire.Doc for C++是一個專業(yè)的Word庫,供開發(fā)人員在任何類型的C++應用程序中閱讀、創(chuàng)建、編輯、比較和轉(zhuǎn)換 Word 文檔,本文演示了如何以兩種不同的方式將 Spire.Doc for C++ 集成到您的 C++ 應用程序中,希望對大家有所幫助
    2023-05-05
  • OpenCV使用BSM統(tǒng)計視頻中移動的對象

    OpenCV使用BSM統(tǒng)計視頻中移動的對象

    這篇文章主要為大家詳細介紹了OpenCV如何使用BackgroundSubstractor(BSM)實現(xiàn)視頻中移動對象統(tǒng)計功能,文中的示例代碼講解詳細,需要的可以參考一下
    2023-02-02
  • C/C++實現(xiàn)監(jiān)控目錄文件變化

    C/C++實現(xiàn)監(jiān)控目錄文件變化

    ReadDirectoryChangesW是Windows操作系統(tǒng)提供的一個函數(shù),用于監(jiān)視目錄的變化,本文主要為大家介紹了如何使用ReadDirectoryChangesW實現(xiàn)監(jiān)控目錄文件變化,需要的可以參考下
    2023-11-11

最新評論

洱源县| 文安县| 崇义县| 卢龙县| 姜堰市| 江西省| 英德市| 文成县| 饶平县| 永善县| 沾益县| 镇原县| 周至县| 南投市| 陕西省| 万载县| 龙山县| 湘乡市| 宜都市| 蒙城县| 沽源县| 天水市| 民乐县| 宣城市| 闻喜县| 雷州市| 高尔夫| 美姑县| 和田县| 兴山县| 维西| 双江| 铜鼓县| 大姚县| 永定县| 台东县| 白山市| 柘荣县| 新兴县| 吉木乃县| 汉阴县|