openCV實現影象的輪廓檢測以及外接矩形
前兩篇博文分別介紹了影象的邊緣檢測和輪廓檢測,本文接著介紹影象的輪廓檢測和輪廓外接矩形:
一、程式碼部分:
// extract_contours.cpp : 定義控制檯應用程式的入口點。
//
#include "stdafx.h"
#include<cv.h>
#include<highgui.h>
using namespace cv;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
//load src image
string img_name="..\\image_norm\\71253.jpg" ;
Mat image=imread(img_name);
imshow("src_image",image);
cvWaitKey(0);
//convert into gray image
Mat gray(image.size(),CV_8U);
cvtColor(image,gray,CV_BGR2GRAY);
imshow("gray",gray);
cvWaitKey(0);
//convert into bin image
threshold(gray,gray,128,255,THRESH_BINARY);//轉換成2值影象
imshow("binary",gray);
cvWaitKey(0);
// Detecting contours
vector<vector<Point>> contours; //定義輪廓集合
vector<Vec4i> hierarchy;
findContours(gray, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);//CV_RETR_EXTERNAL只檢測外部輪廓
// draw black contours on white image
Mat result(gray.size(),CV_8U,Scalar(255));
int index = 0;
for (; index >= 0; index = hierarchy[index][0]) //hierarchy[index][0]表示後一個輪廓
{
Scalar color(rand() & 255, rand() & 255, rand() & 255);
drawContours(result, contours, index, Scalar(0), 1, 8, hierarchy);//描繪字元的外輪廓
Rect rect = boundingRect(contours[index]);//檢測外輪廓
rectangle(result, rect, Scalar(0,0,255), 3);//對外輪廓加矩形框
}
imshow("Contours on white image",result);
cvWaitKey(0);
//draw contours on the original image
Mat original=imread(img_name);
int index_ori = 0;
for (; index_ori >= 0; index_ori = hierarchy[index_ori][0])
{
Scalar color(rand() & 255, rand() & 255, rand() & 255);
//描繪字元的外輪廓
drawContours(original,contours,index_ori,Scalar(255),1,8, hierarchy);
Rect rect = boundingRect(contours[index_ori]);//檢測外輪廓
//對外輪廓加加矩形框
rectangle(original, rect, Scalar(0,0,255), 3);
}
//print contours info
cout<<"The number of external contours:"<<contours.size()<<endl;
imshow("Contours on original image",original);
waitKey(0);
return 0;
}
二、程式執行效果圖:
(1)源影象:
、
(2)灰度影象:
(3)二進位制影象:
(4)輪廓在空白影象上顯示:
(5)在原影象上畫出影象的輪廓以及外接矩形:
至此,影象的輪廓檢測以及外接矩形已經實現,歡迎高人指正。
相關推薦
openCV實現影象的輪廓檢測以及外接矩形
前兩篇博文分別介紹了影象的邊緣檢測和輪廓檢測,本文接著介紹影象的輪廓檢測和輪廓外接矩形: 一、程式碼部分: // extract_contours.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include&
C/C++ 影象處理(16)------影象輪廓の最小外接矩形
有時做影象處理,會遇到影象中大部分資訊是冗餘的情況,以下圖為例: 假設圖中黑色部分才是我們需要研究的物件,則外圍的一堆白色是我們希望去掉的,這個時候用最小外接矩形來框住黑色部分,進而擷取該部分的資
openCV實現影象邊緣檢測
最近自己在做一個有關影象處理的小專案,涉及到影象的邊緣檢測、直線檢測、輪廓檢測以及角點檢測等,本文首先介紹影象的邊緣檢測,使用的是Canny邊緣檢測演算法,具體程式碼以及檢測效果如下: 1、程式碼部分: // Image_Canny.cpp : 定義控制檯應用程式的入口點
opencv 顯示最小面積的外接矩形,並求該矩形的長和寬以及四個角的位置
#include "cv.h" #include "highgui.h" #include <stdio.h> #include <math.h> int main(int argc,char** argv) { IplImage *src,*gr
26、【opencv入門】輪廓查找與繪制(4)——正外接矩形
waitkey font 定義 truct 形狀 esp 圖片 namespace open 一、簡介 1、使用特定形狀的輪廓包圍 在實際應用中, 經常會有將檢測到的輪廓用多邊形表示出來的需求, 提取包圍輪廓的多邊形也方便我們做進一步分析, 輪廓包圍主要有一下幾種: 輪
張正友標定Opencv實現、標定流程以及影象座標轉為世界座標
使用相機以前,首先要進行相機標定,其原因是我們通過標定知道相機的內外參、得到內外參矩陣後可對相機拍攝的照片進行矯正,可以得到畸變較小的影象。而相機標定的輸入就是相機所拍的多幀圖片的角點座標,以及標定板影象上所有角點的空間座標(一般Z軸假設為Z=0)。相機標定後的輸出就
OpenCV使用Canny邊緣檢測器實現影象邊緣檢測
效果圖 原始碼 Canny邊緣檢測器是一種被廣泛使用的演算法,並被認為是邊緣檢測最優的演算法,該方法使用了比高斯差分演算法更復雜的技巧,如多向灰度梯度和滯後閾值化。 Canny
Opencv 輪廓 逼近多邊形曲線 正外接矩形 外接最小矩形
環境 win7 + vs2015 + Opencv2.4.13 對影象輪廓點進行多邊形擬合 void approxPolyDP( InputArray curve, OutputArray appro
OpenCV高斯差分技術實現影象邊緣檢測
效果圖 原始碼 邊緣是影象中畫素亮度變化明顯的點。 高斯差分演算法步驟 將影象轉為灰度影象 // 原圖置灰 Imgproc.cvtColor(src, grayM
Android源碼開發筆記 軟鍵盤與內置物理鍵盤共存以及外接藍牙鍵盤不共存邏輯
icon eva boolean 功能實現 小鍵盤 nokey top apps 需求 需求1: android設備自帶九鍵的小鍵盤,此時小鍵盤被識別為HW Keyboard,默認與軟鍵盤不能共存,需要使軟鍵盤與物理鍵盤共存。 實現: 在網上找的別人總結的Android5.
【OpenCV+Python】輪廓檢測及繪製,可用以生成對應於不規則形狀ROI區域的mask
Overview 在OpenCV中文論壇上很多人問到這樣的問題,如何對影象的不規則區域設定ROI,即設定敏感區域,以用來做相關的影象處理。 根據若干博文的整理及自己的點點經驗,在此進行簡單的歸納: 第一部分主要敘述C++中對於不規則區域設定ROImask的方法,第二部分主要敘述Pyt
OpenCV實現影象上新增漢字
OpenCV已經更新至3.0了,但自帶函式putText依然不支援影象上新增漢字,所以下面實現了影象中新增漢字功能,話不多說,程式碼奉上。 void GetStringSize(HDC hDC, const char* str, int* w, int* h) { SIZE size;
0004-用OpenCV實現影象平移的程式碼(分影象尺寸不變和變兩種情況)
影象平移是啥東西就不用講了吧!需要注意的是影象平移有兩種,第一種是平移後圖像大小不變,這樣會損失影象的部分;第二種是平移後圖像大小變化,這樣原影象不會有損失。 直接上程式碼,大家看效果吧! 程式碼流程如下: 讀取影象→顯示原影象→呼叫自定義的函式translateTransform,作平移後
QT 下用opencv實現影象分類(1)
一.概述 1.按影象中的內容給影象分類是計算機視覺中比較適合初學者的專案,我見過好多手機相簿都有這一個功能,比如把美食歸為一個標籤,藍天白雲歸為一個標籤等等。還有我之前做過的車牌識別的專案都用到影象分類。 2.我做這個專案的環境是QT加opencv3.2,專案在MAC上跑
python+dlib+opencv實現影象人物換臉
偶然間看到了別人用蟒實現的換臉程式碼,很感興趣就簡單研究了下,原理其實不算複雜,最後自己試著用別的方法做了貼圖的顏色修改,在此記錄下,程式碼取之網路,用之網路,重在娛樂。 目錄 實驗環境: 演算法步驟: 演算法詳解: 程式碼 實驗環境: pytho
Android 中使用 dlib+opencv 實現動態人臉檢測
1 概述 完成 Android 相機預覽功能以後,在此基礎上我使用 dlib 與 opencv 庫做了一個關於人臉檢測的 demo。該 demo 在相機預覽過程中對人臉進行實時檢測,並將檢測到的人臉用矩形框描繪出來。具體實現原理如下: 採用雙層 View,底層的 TextureView 用於預覽,程式從 T
opencv實現影象鄰域均值濾波、中值濾波、高斯濾波
void CCVMFCView::OnBlurSmooth()//鄰域均值濾波 { IplImage* in; in = workImg; IplImage* out = cvCreateImage(cvGetSize(in),IPL_DEPTH_8U,workImg-&g
利用OpenCV實現人眼的檢測與跟蹤
程式實現思路如下: 利用級聯分類器檢測出人臉區域,再在人臉區域中檢測出眼睛的區域,檢測出眼睛的區域之後,用跟蹤演算法咔嚓眼睛降低運算量,避免每一幀都去檢測眼睛。 程式碼如下: 程式碼執行結果如下圖所示: 上圖表示偏頭時程式會跟蹤眼睛!
基於Python和OpenCV的影象目標檢測及分割
基於Python和OpenCV的影象目標檢測及分割 本文在https://blog.csdn.net/sinat_36458870/article/details/78825571博主的部落格基礎上加了批處理部分,同時對多張圖
OpenCV實現影象識別
最近參加了一個機器人比賽,本人負責影象識別和串列埠通訊方面的任務工作。串列埠通訊的教程可以見我的部落格;下面主要總結一下我對影象識別的整個學習過程。 開發環境 Mac OS Xcode C++ OpenCV 2.4.12 思考過程 實現影象識別