OpenCV計(jì)算輪廓長(zhǎng)度/周長(zhǎng)和面積
本文實(shí)例為大家分享了OpenCV計(jì)算輪廓長(zhǎng)度/周長(zhǎng)和面積的具體代碼,供大家參考,具體內(nèi)容如下
輪廓面積
輪廓面積是指每個(gè)輪廓中所有的像素點(diǎn)圍成區(qū)域的面積,單位為像素。
double contourArea( InputArray contour, bool oriented = false );
- contour:輪廓的像素點(diǎn)
- oriented:區(qū)域面積是否具有方向的標(biāo)志,true表示面積具有方向性,false表示不具有方向性,默認(rèn)值為不具有方向性的false。
函數(shù)的返回值是統(tǒng)計(jì)輪廓面積的結(jié)果,數(shù)據(jù)類(lèi)型為double。函數(shù)第一個(gè)參數(shù)表示輪廓的像素點(diǎn),數(shù)據(jù)類(lèi)型為vector或者M(jìn)at,相鄰的兩個(gè)像素點(diǎn)之間逐一相連構(gòu)成的多邊形區(qū)域即為輪廓面積的統(tǒng)計(jì)區(qū)域。連續(xù)的三個(gè)像素點(diǎn)之間的連線有可能在同一條直線上,因此為了減少輸入輪廓像素點(diǎn)的數(shù)目,可以只輸入輪廓的頂點(diǎn)像素點(diǎn),例如一個(gè)三角形的輪廓,輪廓中可能具有每一條邊上的所有像素點(diǎn),但是在統(tǒng)計(jì)面積時(shí)可以只輸入三角形的三個(gè)頂點(diǎn)。函數(shù)第二個(gè)參數(shù)是區(qū)域面積是否具有方向的標(biāo)志,參數(shù)為true時(shí)表示統(tǒng)計(jì)的面積具有方向性,輪廓頂點(diǎn)順時(shí)針給出和逆時(shí)針給出時(shí)統(tǒng)計(jì)的面積互為相反數(shù);參數(shù)為false時(shí)表示統(tǒng)計(jì)的面積不具有方向性,輸出輪廓面積的絕對(duì)值。
輪廓長(zhǎng)度 /周長(zhǎng)
double arcLength( InputArray curve, bool closed );
- curve:輪廓或者曲線的2D像素點(diǎn)。
- closed:輪廓或者曲線是否閉合標(biāo)志,true表示閉合。
該函數(shù)能夠統(tǒng)計(jì)輪廓或者曲線的長(zhǎng)度,函數(shù)返回值為統(tǒng)計(jì)長(zhǎng)度,單位為像素,數(shù)據(jù)類(lèi)型為double。函數(shù)的第一個(gè)參數(shù)是輪廓或者曲線的2D像素點(diǎn),數(shù)據(jù)類(lèi)型為vector或者M(jìn)at。函數(shù)的第二個(gè)參數(shù)是輪廓或者曲線是否閉合的標(biāo)志,true表示閉合。
函數(shù)統(tǒng)計(jì)的長(zhǎng)度是輪廓或者曲線相鄰兩個(gè)像素點(diǎn)之間連線的距離,例如計(jì)算三角形三個(gè)頂點(diǎn)A、B和C構(gòu)成的輪廓長(zhǎng)度時(shí),并且函數(shù)第二個(gè)參數(shù)為true時(shí),統(tǒng)計(jì)的長(zhǎng)度是三角形三個(gè)邊AB、BC和CA的長(zhǎng)度之和;當(dāng)參數(shù)為false時(shí),統(tǒng)計(jì)的長(zhǎng)度是由A到C三個(gè)點(diǎn)之間依次連線的距離長(zhǎng)度之和,即AB和BC的長(zhǎng)度之和。
簡(jiǎn)單示例
// // Created by smallflyfly on 2021/6/22. // #include "opencv2/opencv.hpp" #include <iostream> using namespace std; using namespace cv; int main() { Mat im = imread("rice.jfif"); resize(im, im, Size(0, 0), 0.5, 0.5); Mat gray; cvtColor(im, gray, CV_BGR2GRAY); Mat imBin; threshold(gray, imBin, 125, 255, THRESH_BINARY); vector<vector<Point>> contours; findContours(imBin, contours, RETR_EXTERNAL, CHAIN_APPROX_NONE); drawContours(im, contours, -1, Scalar(255, 0, 255)); for (int i = 0; i < contours.size(); ++i) { double area = contourArea(contours[i]); double length = arcLength(contours[i], true); cout << "area: " << area << " " << "length: " << length << endl; } imshow("im", im); waitKey(0); destroyAllWindows(); return 0; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解如何用c++實(shí)現(xiàn)平衡二叉樹(shù)
平衡二叉樹(shù)(Balanced Binary Tree)又被稱為AVL樹(shù)(有別于AVL算法),由前蘇聯(lián)的數(shù)學(xué)家Adelse-Velskil和Landis在1962年提出的高度平衡的二叉樹(shù),根據(jù)科學(xué)家的英文名也稱為AVL樹(shù)。本文介紹了它的原理和如何用C++代碼來(lái)實(shí)現(xiàn)2021-06-06C語(yǔ)言實(shí)現(xiàn)單鏈表的基本功能詳解
鏈表是一個(gè)結(jié)構(gòu)體實(shí)現(xiàn)的一種線性表,它只能從前往后,不可以從后往前,在實(shí)現(xiàn)單鏈表的操作時(shí),需要用指針來(lái)操作。本文主要介紹了實(shí)現(xiàn)單鏈表的基本功能的代碼示例,具有一定價(jià)值,感興趣的同學(xué)可以學(xué)習(xí)一下2021-11-11C++ 中滾動(dòng)條的滾動(dòng)問(wèn)題
本文主要通過(guò)一個(gè)示例,給大家介紹了C++中滾動(dòng)條的滾動(dòng)問(wèn)題,以及相關(guān)參數(shù)的解釋,非常的詳細(xì),有需要的小伙伴可以參考下。2015-06-06詳解C語(yǔ)言內(nèi)核字符串轉(zhuǎn)換方法
在內(nèi)核開(kāi)發(fā)模式下,初始化字符串也需要調(diào)用專用的初始化函數(shù),如下分別初始化ANSI和UNCODE字符串,本文我們就來(lái)看看代碼是如何實(shí)現(xiàn)的2022-09-09c++實(shí)現(xiàn)的常見(jiàn)緩存算法和LRU
LRU緩存算法也叫LRU頁(yè)面置換算法,是一種經(jīng)典常用的頁(yè)面置換算法,下面這篇文章主要介紹了c++實(shí)現(xiàn)的常見(jiàn)緩存算法和LRU,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-01-01關(guān)于在MFC中將窗口最小化到托盤(pán)實(shí)現(xiàn)原理及操作步驟
最小化的原理:首先要將窗口隱藏,然后在右下角繪制圖標(biāo);恢復(fù)的原理:將窗口顯示,再將托盤(pán)中的圖片刪除,接下來(lái)介紹實(shí)現(xiàn)方法,感興趣的朋友可以了解下啊,希望本文對(duì)你有所幫助2013-01-01