1. 程式人生 > >opencv橢圓膚色模型人臉檢測

opencv橢圓膚色模型人臉檢測

void ellipse(Mat& img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar& color, int thickness=1, int lineType=8, int shift=0) 該函式是用來在指定圖片上繪製橢圓弧線的。

  引數image為需要繪製橢圓的影象;

  引數center是該橢圓的中心點座標;

  引數axes是該橢圓的長半軸和短半軸;

  引數angle是該橢圓和水平方向上的旋轉夾角;

  引數startAngle表示繪製橢圓弧線相對該橢圓自己的水平軸的起始角度;

  引數endAngel表示繪製橢圓弧線相對該橢圓自己的水平軸的終止角度;         繪製橢圓曲線的示意圖如下所示: ../../../_images/ellipse.png

code: #include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/contrib/contrib.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
#include<vector>
using namespace std;
using namespace cv;
Mat input_image;
Mat output_mask;
Mat output_image;
Mat mask;
int main()
{
 input_image = imread("image01.jpg");
 /*橢圓面板模型*/
 Mat skinCrCbHist=Mat::zeros(Size(256,256),CV_8UC1);
 ellipse(skinCrCbHist,Point(113,155.6),Size (23.4,15.2),43.0,0.0,360.0,Scalar(255,255,255),-1);
 imshow("ellipse", skinCrCbHist);
 Mat element=getStructuringElement(MORPH_RECT,Size(3,3),Point(-1,-1));
 while(true)
 {
 Mat ycrcb_image;
 output_mask=Mat::zeros(input_image.size(),CV_8UC1);
 cvtColor(input_image,ycrcb_image,CV_BGR2YCrCb); //首先轉換成到YCrCb空間
 for(int i=0;i<input_image.rows;i++) //利用橢圓面板模型進行面板檢測
 {
  uchar* p=(uchar*)output_mask.ptr<uchar>(i);
  Vec3b* ycrcb=(Vec3b*)ycrcb_image.ptr<Vec3b>(i);
  for(int j=0;j<input_image.cols;j++)
  {
  if(skinCrCbHist.at<uchar>(ycrcb[j][1],ycrcb[j][2])>0)
  p[j]=255;
  }
 }
 morphologyEx(output_mask,output_mask,MORPH_CLOSE,element);
 vector< vector<Point> > contours;// 輪廓
 vector< vector<Point> > filterContours;//篩選後的輪廓
 vector< Vec4i > hierarchy;//輪廓的結構資訊
 contours.clear();
 hierarchy.clear();
 filterContours.clear();
 findContours(output_mask, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
// 去除偽輪廓
 for(size_t i=0;i<contours.size();i++)
 {
  if(fabs(contourArea(Mat(contours[i])))>1000/*&&fabs(arcLength(Mat(contours[i]),true))<2000*/) //判斷手進入區域的閾值
  filterContours.push_back(contours[i]);
 }
 output_mask.setTo(0);
 drawContours(output_mask,filterContours,-1,Scalar(255,0,0),CV_FILLED); //8, hierarchy);
 input_image.copyTo(output_image,output_mask);
 imshow("input image",input_image);
 imshow("output image",output_image);
 output_image.setTo(0);
 if(27==waitKey(30))
 return 0;
 }
 return 0;

}
參考文獻:               http://www.lai18.com/content/494270.html               http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html?highlight=ellipse

相關推薦

opencv橢圓膚色模型人臉檢測

void ellipse(Mat& img, Point center, Size axes, double angle, double startAngle, double endAngl

基於opencv和qt的人臉檢測小系統

idt image span ttext 函數 TE 對話 nta 數量 摘要:利用opencv讀取視頻、圖片並檢測人臉,利用QT顯示窗口,功能選擇等 環境:Ubuntu18.04、OpenCV3.4.0、QT5.10.1 效果圖: 代碼如下(比較簡單沒什麽註釋): ma

win10 + python36 + dlib + OpenCV 3.4.0 人臉檢測 安裝教程

win10 +  python36  +  dlib :      https://www.cnblogs.com/AdaminXie/p/9032224.html      https://git

OpenCV訓練自己的人臉檢測級連分類器並測試

0. 概述 分為如下幾步: step1. 製作訓練資料集 step2. 訓練分類器 step3. 使用分類器進行分類 1. 準備工作 建立一個專案目錄objection_detection/ $ mkdir objection_detecti

OpenCV+VideoInput 捕捉攝像頭+人臉檢測

【概述】 筆者用的環境是筆記本Win7+VS2010+OpenCV2.2     當利用OpenCV的cvCreateCameraCapture(0)、cvQueryFrame( pCapture )函式捕捉攝像頭資料時,老是捕捉不到,顯示黑視窗。 在網上搜了搜,發現筆記

OpenCV實踐之路——人臉檢測(C++/Python)

本文由@星沉閣冰不語出品,轉載請註明作者和出處。之前一直覺得人臉檢測是非常麻煩的,即使是用opencv,麻煩到我都不敢去碰。這兩天仔細看了下,如果只是呼叫opencv自帶的分類器和函式的話,簡直是簡單。這不,正好最近也在學習Python,索性就用C++和Python兩種語言都

opencv實現攝像頭實時人臉檢測

昨天晚上在大神的帶領下領略了opencv的風采,搞得我都想換行搞機器視覺了,這個庫真的太好用了,用很簡單的程式碼就能寫出自己的人臉檢測程式。 我把程式直接貼出來,大家一次討論學習,平臺是opencv2.4.10 + win10 + VS2013 #include<io

OpenCV人臉檢測(完整源代碼+思路)

exceptio pop ret 基礎 err 攝像 alt lena ann 本博文IDE為vs2013 OpenCV2.49 話不多說,先看視頻演示(20S演示): 例如以下: https://v.youku.com

OpenCV學習代碼記錄——人臉檢測

puts tro 按鍵 img IE source cpu cpp gray 很久之前學習過一段時間的OpenCV,當時沒有做什麽筆記,但是代碼都還在,這裏把它貼出來做個記錄。 代碼放在碼雲上,地址在這裏https://gitee.com/solym/OpenCVTest/

opencv_人臉檢測模型訓練、人臉識別

nbsp tro python3.6 pychar 入門 tex 幫助 family ext 人臉檢測、模型訓練、人臉識別 2018-08-15   今天給大家帶來一套人臉識別一個小案例,主要是幫助小夥伴們解決如何入門OpenCV人臉識別的問題,現在的AI行業比較火熱,

使用級聯分類器實現人臉檢測OpenCV自帶的數據)

== output include print code ould har his ... 1 #include <opencv2/opencv.hpp> 2 #include <iostream> 3 4 using namespace

Java+opencv實現人臉檢測

版本 Java1.8 opencv3.4 程式碼: import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.JPanel; imp

【機器學習】最容易實現的基於OpenCV人臉檢測程式碼、檢測器及檢測效果

基於opencv自帶的人臉檢測模型,實現簡單的人臉檢測功能,可作為機器學習初學者練手使用。簡單易學,具體的方法及程式碼如下。 1、執行結果 輸入原圖 輸出結果 2、工程需要載入的opencv庫如下: 3、用到的人臉檢測器 4、具體實現程式碼 #

python實現人臉檢測及識別(2)---- 利用keras庫訓練人臉識別模型

前面已經採集好資料集boss資料夾存放需要識別的物件照片,other存放其他人的訓練集照片,現在,我們終於可以嘗試訓練我們自己的卷積神經網路模型了。CNN擅長影象處理,keras庫的tensorflow版亦支援此種網路模型,萬事俱備,就放開手做吧。前面說過,我們需要通過大量的訓練資料訓練我們的模型,

OpenCV神技——人臉檢測、貓臉檢測

簡介 OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以執行在Linux、Windows、Android和Mac OS作業系統上。它輕量級而且高效——由一系列 C 函式和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的介面,實現了影象處理和計算機視覺方面的很多

MTCNN實時人臉檢測網絡詳解與opencv+tensorflow代碼演示

window gre 交叉 級聯 選擇 als beta text 多任務 MTCNN模型概述 多任務卷積神經網絡(MTCNN)實現人臉檢測與對齊是在一個網絡裏實現了人臉檢測與五點標定的模型,主要是通過CNN模型級聯實現了多任務學習網絡。整個模型分為三個階段,第一階段通過一

基於OpenCV人臉識別/人臉檢測

1:簡介 人臉檢測指從現實環境中識別出人臉的位置; 人臉識別基於人臉檢測,下一步才能辨析人臉的屬性,從而判別這個人是誰。 2:影象基本概念 幀:一張圖 幀數:一秒鐘重新整理多少張圖片 解析度:單位大小所能承載的畫素,能力為正相關 影象插值:提高影象解析度 OpenCV提供了5種插值方

轉:讓opencv輸出人臉檢測的得分(置信率)

讓opencv輸出人臉檢測的得分(置信率) 最近專案略多,其中一個需要找出一些和臉比較像但是不是臉的負樣本,想用opencv的人臉檢測器檢測到的錯誤臉作為這樣的負樣本。 但是國內(包括國外)居然幾乎沒有相關的資料如何輸出detectMultiScale()

Python+opencv學習筆記之人臉視訊採集及實時檢測(樹莓派3B+下檢測

實驗目標: 1.首先通過opencv程式設計寫一個可以呼叫攝像頭並且能將攝像頭捕捉到的內容進行儲存。 2.將視訊檔案傳送到我們的樹莓派上,然後再利用Python編寫程式對視訊進行人臉識別處理,最後將人臉識別後的視訊儲存。 3.對某一張圖片進行處理,讓其具有毛玻璃效果,並將處理後的圖片儲存。

OpenCV神技——人臉檢測,貓臉檢測

簡介   OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以執行在Linux、Windows、Android和Mac OS作業系統上。它輕量級而且高效——由一系列 C 函式和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB