91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Opencv如何提取連通區域輪廓

發布時間:2021-06-11 14:03:55 來源:億速云 閱讀:532 作者:小新 欄目:編程語言

小編給大家分享一下Opencv如何提取連通區域輪廓,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

在進行圖像分割后,可能需要對感興趣的目標區域進行提取,比較常用的方法是計算輪廓。

通過輪廓可以獲得目標的一些信息:

(1)目標位置

(2)目標大小(即面積)

(3)目標形狀(輪廓矩)

當然,輪廓不一定代表希望目標區域,閾值分割時可能造成一部分信息丟失,因此可以計算輪廓的質心坐標,再進行漫水填充。

程序中有尋找質心+填充,但效果不好,因此就不放填充后的圖了。

Opencv如何提取連通區域輪廓

實驗結果:

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdio.h>
 
using namespace cv;
using namespace std;
 
vector<vector<Point> > contours; //輪廓數組
vector<Point2d> centers; //輪廓質心坐標 
vector<vector<Point> >::iterator itr; //輪廓迭代器
vector<Point2d>::iterator itrc; //質心坐標迭代器
vector<vector<Point> > con; //當前輪廓
 
 
int main()
{
 double area;
 double minarea = 100;
 double maxarea = 0;
 Moments mom; // 輪廓矩
 Mat image,gray,edge,dst;
 namedWindow("origin");
 namedWindow("connected_region");
 
 image = imread("view.jpg");
 cvtColor(image, gray, COLOR_BGR2GRAY);
 blur(gray, edge, Size(3,3)); //模糊去噪
 threshold(edge,edge,200,255,THRESH_BINARY); //二值化處理
 
 /*尋找輪廓*/
 findContours( edge, contours,
 CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE );
 itr = contours.begin(); //使用迭代器去除噪聲輪廓
 while(itr!=contours.end())
 {
 area = contourArea(*itr);
 if(area<minarea)
 {
 itr = contours.erase(itr); //itr一旦erase,需要重新賦值
 }
 else
 {
 itr++;
 }
 if (area>maxarea)
 {
 maxarea = area;
 }
 }
 dst = Mat::zeros(image.rows,image.cols,CV_8UC3);
 
 /*繪制連通區域輪廓,計算質心坐標*/
 Point2d center;
 itr = contours.begin();
 while(itr!=contours.end())
 {
 area = contourArea(*itr);
 con.push_back(*itr);
 if(area==maxarea)
 drawContours(dst,con,-1,Scalar(0,0,255),2); //最大面積紅色繪制
 else
 drawContours(dst,con,-1,Scalar(255,0,0),2); //其它面積藍色繪制
 con.pop_back();
 
 //計算質心
 mom = moments(*itr);
 center.x = (int)(mom.m10/mom.m00);
 center.y = (int)(mom.m01/mom.m00);
 centers.push_back(center);
 
 itr++;
 }
 imshow("origin",image);
 imshow("connected_region",dst);
 waitKey(0);
 
 /*漫水填充連通區域*/
 Point2d seed;
 int new_scalar = 0;
 int loDiff = 8, upDiff = 8;
 int connectivity = 4; 
 
 itrc = centers.begin();
 while(itrc!=centers.end())
 { 
 seed = *itrc;
 floodFill(image,seed,Scalar::all(new_scalar),NULL,
 Scalar::all(loDiff),Scalar::all(upDiff),connectivity);
 itrc++;
 }
 
 waitKey(0);
 return 0 ;
}

以上是“Opencv如何提取連通區域輪廓”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

行唐县| 苍山县| 遂平县| 延安市| 赤峰市| 永城市| 富民县| 水城县| 措美县| 镇安县| 禄丰县| 富顺县| 新乡县| 增城市| 东海县| 漾濞| 巴楚县| 小金县| 茂名市| 长泰县| 宁晋县| 张掖市| 孟州市| 台东市| 石狮市| 宣武区| 新津县| 徐水县| 莆田市| 东兰县| 元江| 盖州市| 汕头市| 化隆| 资源县| 遵化市| 阿拉善左旗| 铅山县| 营山县| 会东县| 微山县|