1. 程式人生 > >openCV實現影象的輪廓檢測以及外接矩形

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 思考過程 實現影象識別