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

OpenCV實(shí)現(xiàn)繪制輪廓外接矩形

 更新時(shí)間:2022年12月29日 14:02:28   作者:黑色の鉛筆  
這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)繪制輪廓外接矩形的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

1.尋找輪廓

api

void cv::findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point()

各個(gè)參數(shù)詳解如下:

Image表示輸入圖像,必須是二值圖像,二值圖像可以threshold輸出、Canny輸出、inRange輸出、自適應(yīng)閾值輸出等。

Contours獲取的輪廓,每個(gè)輪廓是一系列的點(diǎn)集合

Hierarchy輪廓的層次信息,每個(gè)輪廓有四個(gè)相關(guān)信息,分別是同層下一個(gè)、前一個(gè)、第一個(gè)子節(jié)點(diǎn)、父節(jié)點(diǎn)

mode 表示輪廓尋找時(shí)候的拓?fù)浣Y(jié)構(gòu)返回 -RETR_EXTERNAL表示只返回最外層輪廓 -RETR_TREE表示返回輪廓樹結(jié)構(gòu)

  • CV_RETR_EXTERNAL:只檢測外輪廓。忽略輪廓內(nèi)部的洞
  • CV_RETR_LIST:檢測所有輪廓,但不建立繼承(包含)關(guān)系
  • CV_RETR_TREE:檢測所有輪廓,并且建立所有的繼承(包含)關(guān)系。也就是說用CV_RETR_EXTERNAL和CV_RETR_LIST方法的時(shí)候hierarchy這個(gè)變量是沒用的,因?yàn)榍罢邲]有包含關(guān)系,找到的都是外輪廓,后者僅僅是找到所喲的輪廓但并不把包含關(guān)系區(qū)分。用TREE這種檢測方法的時(shí)候我們的hierarchy這個(gè)參數(shù)才是有意義的
  • CV_RETR_CCOMP:檢測所有輪廓,但是僅僅建立兩層包含關(guān)系。外輪廓放到頂層,外輪廓包含的第一層內(nèi)輪廓放到底層,如果內(nèi)輪廓還包含輪廓,那就把這些內(nèi)輪廓放到頂層去。

Method表示輪廓點(diǎn)集合取得是基于什么算法,常見的是基于CHAIN_APPROX_SIMPLE鏈?zhǔn)骄幋a方法

注意,如果圖像底色是白色,則檢測最外層的輪廓為圖像邊框

2.繪制輪廓外接矩形

繪制外接矩形包括兩種:

繪制最大外接矩形

(Rect cv::boundingRect( InputArray points ))

其中,輸入?yún)?shù)points為一系列點(diǎn)的集合(findContours中contours中的一個(gè)元素),對輪廓來說就是該輪廓的點(diǎn)集 返回結(jié)果是一個(gè)矩形,x, y, w, h

繪制最小外接矩形

RotatedRect cv::minAreaRect( InputArray points )

其中,輸入?yún)?shù)points為一系列點(diǎn)的集合(findContours中contours中的一個(gè)元素) ,對輪廓來說就是該輪廓的點(diǎn)集 返回結(jié)果是一個(gè)旋轉(zhuǎn)矩形,包含下面的信息: - 矩形中心位置 - 矩形的寬高 - 旋轉(zhuǎn)角度。

3.代碼

EdgeDetection.h

#pragma once
#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;


class EdgeDetection
{
    cv::Mat m_img;
    cv::Mat m_canny;
public:
    EdgeDetection(cv::Mat iamge);
    bool cannyProcess(unsigned int downThreshold,unsigned int upThreshold);
    bool getContours();

    ~EdgeDetection();
};

EdgeDetection.cpp

#include "EdgeDetection.h"

EdgeDetection::EdgeDetection(cv::Mat image)
{
    m_img = image;
}

bool EdgeDetection::cannyProcess(unsigned int downThreshold, unsigned int upThreshold)
{
    bool ret=true;

    if (m_img.empty())
    {
        ret = false;
    }

    cv::Canny(m_img, m_canny, downThreshold, upThreshold);
    cv::imshow("Canny", m_canny);

    return ret;
}

bool EdgeDetection::getContours()
{
    bool ret = true;
    if (m_canny.empty())
    {
        ret = false;
    }

    cv::Mat k = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3), cv::Point(-1, -1));
    cv::dilate(m_canny, m_canny, k);
    imshow("dilate", m_canny);

    // 輪廓發(fā)現(xiàn)與繪制
    vector<vector<cv::Point> > contours;
    vector<Vec4i> hierarchy;
    findContours(m_canny, contours, cv::RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point());

    for (size_t i = 0; i < contours.size();++i)
    {
        // 最大外接輪廓
        cv::Rect rect = cv::boundingRect(contours[i]);
        cv::rectangle(m_img,rect,cv::Scalar(0,255,0),2,LINE_8);


        // 最小外接輪廓
        RotatedRect rrt = minAreaRect(contours[i]);
        Point2f pts[4];
        rrt.points(pts);
        // 繪制旋轉(zhuǎn)矩形與中心位置
        for (int i = 0; i < 4; i++) {
            line(m_img, pts[i % 4], pts[(i + 1) % 4], Scalar(0, 0, 255), 2, 8, 0);
        }
        Point2f cpt = rrt.center;
        circle(m_img, cpt, 2, Scalar(255, 0, 0), 2, 8, 0);
    }





    imshow("contours", m_img);
    return ret;
}

EdgeDetection::~EdgeDetection()
{
}

main.cpp

#include"EdgeDetection.h"
using namespace std;
using namespace cv;



int main(int argc, char* argv[])
{
    Mat src = imread("rect.jpg");
    if (src.empty())
    {
        cout << "image is empty" << endl;
        return -1;
    }

    imshow("input", src);

    EdgeDetection ed(src);

    ed.cannyProcess(80,160);
    ed.getContours();

    waitKey(0);
    return 0;
}

原圖

canny

目標(biāo)圖

到此這篇關(guān)于OpenCV實(shí)現(xiàn)繪制輪廓外接矩形的文章就介紹到這了,更多相關(guān)OpenCV輪廓外接矩形內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言中const,volatile,restrict的用法總結(jié)

    C語言中const,volatile,restrict的用法總結(jié)

    以下是對C語言中const,volatile,restrict的用法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下
    2013-10-10
  • 一文讀懂C++中的繼承之菱形繼承(案例分析)

    一文讀懂C++中的繼承之菱形繼承(案例分析)

    這篇文章主要介紹了C++中的繼承之菱形繼承的相關(guān)知識(shí),通過案例給大家詳細(xì)分析介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-04-04
  • C++中std::distance使用方法示例

    C++中std::distance使用方法示例

    std::distance?是 C++ 標(biāo)準(zhǔn)庫中的一個(gè)函數(shù),用于計(jì)算兩個(gè)迭代器之間的距離,本文主要介紹了C++中std::distance使用方法示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • 一文搞懂C++中的運(yùn)算符重載

    一文搞懂C++中的運(yùn)算符重載

    這篇文章主要為大家詳細(xì)介紹了C++中的運(yùn)算符重載的相關(guān)資料,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C++有一定幫助,需要的可以參考一下
    2022-09-09
  • Qt實(shí)現(xiàn)高準(zhǔn)確率的語音識(shí)別

    Qt實(shí)現(xiàn)高準(zhǔn)確率的語音識(shí)別

    Vosk是一個(gè)開源的語音識(shí)別工具,支持中英文及多種語言,具備離線識(shí)別能力,且不依賴互聯(lián)網(wǎng),本文就來聊聊如何使用Vosk API在C++中進(jìn)行中英文識(shí)別吧
    2024-11-11
  • opencv車道線檢測的實(shí)現(xiàn)方法

    opencv車道線檢測的實(shí)現(xiàn)方法

    這篇文章主要介紹了opencv車道線檢測的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • C標(biāo)準(zhǔn)庫<assert.h>的實(shí)現(xiàn)詳解

    C標(biāo)準(zhǔn)庫<assert.h>的實(shí)現(xiàn)詳解

    這篇文章主要介紹了C標(biāo)準(zhǔn)庫<assert.h>的實(shí)現(xiàn),主要包括了<assert.h>的基本概念、實(shí)現(xiàn)及用法等,需要的朋友可以參考下
    2014-09-09
  • vs2017智能感知錯(cuò)誤解決代碼標(biāo)紅但編譯通過問題

    vs2017智能感知錯(cuò)誤解決代碼標(biāo)紅但編譯通過問題

    這篇文章主要介紹了vs2017智能感知錯(cuò)誤代碼標(biāo)紅但編譯通過問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Mac OS上搭建Apache+PHP+MySQL開發(fā)環(huán)境的詳細(xì)教程

    Mac OS上搭建Apache+PHP+MySQL開發(fā)環(huán)境的詳細(xì)教程

    這篇文章主要介紹了Mac OS上搭建Apache+PHP+MySQL開發(fā)環(huán)境的詳細(xì)教程,包括常見的PHP連接MySQL失敗問題的解決辦法,需要的朋友可以參考下
    2016-01-01
  • QT編寫tcp通信工具(Client篇)

    QT編寫tcp通信工具(Client篇)

    這篇文章主要介紹了QT編寫tcp通信工具,適用于Client端,類似網(wǎng)上常見的網(wǎng)絡(luò)調(diào)試工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論

南木林县| 濮阳县| 类乌齐县| 滁州市| 岐山县| 井研县| 石门县| 望都县| 精河县| 宜宾县| 鹤峰县| 青田县| 锡林浩特市| 安宁市| 民丰县| 新闻| 迁安市| 昌都县| 商丘市| 壶关县| 香格里拉县| 云南省| 马山县| 弥渡县| 郯城县| 曲麻莱县| 墨玉县| 汝阳县| 浙江省| 浪卡子县| 南平市| 邻水| 大同市| 碌曲县| 闸北区| 谷城县| 聂拉木县| 双辽市| 湖北省| 沭阳县| 横峰县|