日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

Opencv实战【1】人脸检测并对ROI区域进行部分处理(变身乔碧萝!!!)

發(fā)布時(shí)間:2023/12/1 pytorch 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Opencv实战【1】人脸检测并对ROI区域进行部分处理(变身乔碧萝!!!) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

步驟:

1、利用Opencv自帶的分類器檢測(cè)人臉

預(yù)備知識(shí):Haar特征分類器

Haar特征分類器就是一個(gè)XML文件,該文件中會(huì)描述人體各個(gè)部位的Haar特征值。包括人臉、眼睛、嘴唇等等。
Haar特征分類器存放地址:
(找自己的安裝目錄)
1、D:\opencv\opencv4.0\opencv4.0.0\sources\data\haarcascades
2、D:\opencv\opencv4.0\opencv4.0.0\build\etc\haarcascades
總覽一下:

haarcascade_eye.xml ;僅可以檢測(cè)睜開的眼睛 haarcascade_eye_tree_eyeglasses.xml;僅在帶被檢測(cè)者戴眼鏡時(shí)方可檢測(cè) haarcascade_frontalcatface.xml haarcascade_frontalcatface_extended.xml haarcascade_frontalface_alt.xml haarcascade_frontalface_alt_tree.xml haarcascade_frontalface_alt2.xml;個(gè)人感覺這個(gè)好用點(diǎn) haarcascade_frontalface_default.xml haarcascade_fullbody.xml haarcascade_lefteye_2splits.xml haarcascade_licence_plate_rus_16stages.xml haarcascade_lowerbody.xml haarcascade_profileface.xml haarcascade_righteye_2splits.xml haarcascade_russian_plate_number.xml haarcascade_smile.xml haarcascade_upperbody.xml

detectMultiScale函數(shù)詳解

void detectMultiScale(const Mat& image,CV_OUT vector<Rect>& objects,double scaleFactor = 1.1,int minNeighbors = 3, int flags = 0,Size minSize = Size(),Size maxSize = Size() );

函數(shù)介紹:
參數(shù)1:image–待檢測(cè)圖片,一般為灰度圖像加快檢測(cè)速度;
參數(shù)2:objects–被檢測(cè)物體的矩形框向量組;
參數(shù)3:scaleFactor–表示在前后兩次相繼的掃描中,搜索窗口的比例系數(shù)。默認(rèn)為1.1即每次搜索窗口依次擴(kuò)大10%;
參數(shù)4:minNeighbors–表示構(gòu)成檢測(cè)目標(biāo)的相鄰矩形的最小個(gè)數(shù)(默認(rèn)為3個(gè))。
如果組成檢測(cè)目標(biāo)的小矩形的個(gè)數(shù)和小于 min_neighbors - 1 都會(huì)被排除。
如果min_neighbors 為 0, 則函數(shù)不做任何操作就返回所有的被檢候選矩形框,
這種設(shè)定值一般用在用戶自定義對(duì)檢測(cè)結(jié)果的組合程序上;
參數(shù)5:flags–要么使用默認(rèn)值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果設(shè)置為
CV_HAAR_DO_CANNY_PRUNING,那么函數(shù)將會(huì)使用Canny邊緣檢測(cè)來排除邊緣過多或過少的區(qū)域,
因此這些區(qū)域通常不會(huì)是人臉?biāo)趨^(qū)域;
參數(shù)6、7:minSize和maxSize用來限制得到的目標(biāo)區(qū)域的范圍。
代碼實(shí)現(xiàn):

#include <opencv2/opencv.hpp> #include <iostream> #include "windows.h" #include <stdio.h> #include "My_ImageProssing_base.h"using namespace cv; using namespace std;//訓(xùn)練文件路徑 string xmlPath = "D:\\opencv\\opencv4.0\\opencv4.0.0\\build\\etc\\haarcascades\\haarcascade_frontalface_alt2.xml";int main(int argc, char** atgv) {Mat img = imread("D:\\opencv_picture_test\\beauty\\裴佳欣.png",0);//Mat img = imread("D:\\opencv_picture_test\\新垣結(jié)衣\\test2.jpg");imshow("input image", img);//【1】加載分類器CascadeClassifier detector;detector.load(xmlPath);if (!detector.load(xmlPath)) //加載訓(xùn)練文件 {cout << "不能加載指定的xml文件" << endl;return -1;}//【2】檢測(cè)人臉,將信息存儲(chǔ)到矩形類faces中vector<Rect> faces;//OpenCV的Rect矩形類用法//如果創(chuàng)建一個(gè)Rect對(duì)象rect那么rect會(huì)有以下幾個(gè)功能://rect.area(); //返回rect的面積 //rect.size(); //返回rect的尺寸//rect.tl(); //返回rect的左上頂點(diǎn)的坐標(biāo) //rect.br(); //返回rect的右下頂點(diǎn)的坐標(biāo)//rect.width(); //返回rect的寬度 //rect.height(); //返回rect的高度 //rect.contains(Point(x, y)); //返回布爾變量,判斷rect是否包含Point(x, y)點(diǎn)detector.detectMultiScale(img,faces, 1.1, 3, 0);//分類器對(duì)象調(diào)用//【3】框出人臉for (size_t t = 0; t < faces.size(); t++) {rectangle(img, faces[t], Scalar(0, 0, 255), 2, 8);//faces[t]表示第t個(gè)的face的矩形類//2代表線條寬度8是線型,默認(rèn)取8}namedWindow("Result", WINDOW_NORMAL); //定義窗口顯示屬性imshow("Result", img);waitKey(0);return 0; }

2、對(duì)人臉矩形框內(nèi)進(jìn)行一些處理(這里只對(duì)灰度圖進(jìn)行處理)

1、打馬賽克(這里我們使用均值濾波)

//打馬賽克函數(shù) void mosaic(Mat& srcImage, Mat& dstImage, int times) {blur(srcImage,dstImage, Size(times*2+1, times * 2 + 1)); }

2、換成其他圖片(使用resize,根據(jù)人臉區(qū)域進(jìn)行大小改變)//變身喬碧蘿

void paste(Mat& srcImage, Mat& dstImage) {resize(srcImage,dstImage, dstImage.size()); }

3、美顏磨皮(雙邊濾波)

void clearFreckle(Mat& srcImage, Mat& dstImage, int times) {bilateralFilter(srcImage, dstImage,times, times*2, times/2); }

4、視頻處理
(模板)

VideoCapture capture(0); //VideoCapture capture("D:\\opencv_picture_test\\videos\\臉.avi"); while (1){Mat img;capture >> img; //讀取當(dāng)前幀//imshow("原視頻", img); //顯示當(dāng)前幀cvtColor(img,img, COLOR_BGR2GRAY); //轉(zhuǎn)化為灰度圖Mat dstImage = img.clone();//【2】檢測(cè)人臉,將信息存儲(chǔ)到矩形類faces中vector<Rect> faces;detector.detectMultiScale(img, faces, 1.1, 3, 0);//分類器對(duì)象調(diào)用//【3】修改區(qū)域信息.......//修改完畢imshow("處理后的視頻", dstImage); //顯示當(dāng)前幀if(waitKey(10) >=0 ) break; //延時(shí)10ms}

完整的代碼(視頻+貼圖):

#include <opencv2/opencv.hpp> #include <iostream> #include "windows.h" #include <stdio.h> #include "My_ImageProssing_base.h"using namespace cv; using namespace std;//訓(xùn)練文件路徑 string xmlPath = "D:\\opencv\\opencv4.0\\opencv4.0.0\\build\\etc\\haarcascades\\haarcascade_frontalface_alt2.xml"; //打馬賽克函數(shù) void mosaic(Mat& srcImage, Mat& dstImage, int times) {blur(srcImage,dstImage, Size(times*2+1, times * 2 + 1)); } void clearFreckle(Mat& srcImage, Mat& dstImage, int times) {bilateralFilter(srcImage, dstImage,times, times*2, times/2); } void paste(Mat& srcImage, Mat& dstImage) {resize(srcImage,dstImage, dstImage.size()); } int main() {//Mat img = imread("D:\\opencv_picture_test\\beauty\\裴佳欣.png",0);Mat img2 = imread("D:\\opencv_picture_test\\趣圖景圖\\小豬.jpg",0);//imshow("input image", img);//【1】加載分類器CascadeClassifier detector;detector.load(xmlPath);if (!detector.load(xmlPath)) //加載訓(xùn)練文件 {cout << "不能加載指定的xml文件" << endl;return -1;}//調(diào)用攝像頭VideoCapture capture(0); //類似于 int a=1;//VideoCapture capture("D:\\opencv_picture_test\\videos\\臉.avi"); //類似于 int a=1;while (1){Mat img;capture >> img; //讀取當(dāng)前幀//imshow("原視頻", img); //顯示當(dāng)前幀cvtColor(img,img, COLOR_BGR2GRAY); //轉(zhuǎn)化為灰度圖Mat dstImage = img.clone();//【2】檢測(cè)人臉,將信息存儲(chǔ)到矩形類faces中vector<Rect> faces;detector.detectMultiScale(img, faces, 1.1, 3, 0);//分類器對(duì)象調(diào)用//【3】修改區(qū)域信息for (size_t t = 0; t < faces.size(); t++){int rows = faces[t].height;int cols = faces[t].width;int start_y = faces[t].y;int start_x = faces[t].x;Mat ROI(rows, cols, CV_8UC1, Scalar(0));Mat dstROI(rows, cols, CV_8UC1, Scalar(0));for (int j = 0;j < rows;j++) //行循環(huán){for (int i = 0;i < cols;i++) //列循環(huán){//-------【開始處理每個(gè)像素】---------------ROI.at<uchar>(j, i) = img.at<uchar>(j + start_y, i + start_x);//-------【處理結(jié)束】---------------}}//馬賽克化//mosaic(ROI,dstROI,10);//貼圖paste(img2,dstROI);//去雀斑(磨皮)//clearFreckle(ROI, dstROI, 10);for (int j = 0;j < rows;j++) //行循環(huán){for (int i = 0;i < cols;i++) //列循環(huán){//-------【開始處理每個(gè)像素】---------------dstImage.at<uchar>(j + start_y, i + start_x) = dstROI.at<uchar>(j, i);//-------【處理結(jié)束】---------------}}}imshow("處理后的視頻", dstImage); //顯示當(dāng)前幀if(waitKey(10) >=0 ) break; //延時(shí)10ms}return 0; }

效果展示

1、馬賽克效果

2、磨皮效果(臉蛋更加白凈!!!)

3、變身喬碧蘿
視頻放不上來,就放gif動(dòng)態(tài)圖了。

參考鏈接

haarcascade_eye.xml、eye_tree_eyeglasses.xml、haarcascade_lefteye_2splits.xml區(qū)別使用
OpenCV人臉識(shí)別–detectMultiScale函數(shù)

總結(jié)

以上是生活随笔為你收集整理的Opencv实战【1】人脸检测并对ROI区域进行部分处理(变身乔碧萝!!!)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 丰满人妻一区二区三区在线 | av桃色| 亚洲三级在线 | 亚洲国产永久 | 亚洲精品~无码抽插 | 亚洲黄色影视 | 北条麻妃一二三区 | 成人av久久| 香蕉视频在线免费 | 国产欧美精品区一区二区三区 | 成人午夜av| 三级黄色av | 中国zzji女人高潮免费 | 法国空姐在线观看视频 | 欧美日韩3p | 最近中文字幕在线mv视频在线 | 久久精品国产久精国产 | 久久a视频 | 精品五月天 | 中文字幕一区久久 | 免费中文字幕在线观看 | 国产春色 | 麻豆传媒一区二区 | 久久亚洲精品石原莉奈 | 亚洲精品免费观看 | 国产精品.xx视频.xxtv | 超碰av人人 | 婷婷综合久久 | 玩弄丰满少妇xxxxx性多毛 | 久久亚洲国产成人精品性色 | 亚州激情 | 艳妇av | 三级网站视频 | 国产精品av在线 | 青青草成人在线观看 | 成人福利一区 | 欧美脚交视频 | 热久久影院 | 鬼眼| 天干夜天干天天天爽视频 | 在线视频播放大全 | 三八激情网 | 欧美激情视频一区二区 | 久色网站| 精品九九九九 | 色老久久 | 伊人天天操 | 国产精品一区二区三区在线看 | 一区二区三区小视频 | 麻豆md0077饥渴少妇 | 成人熟女一区二区 | 一卡二卡三卡在线 | 99免费国产 | 欧美三区在线观看 | 亚洲成网站 | 久久国产主播 | 国产欧美日韩免费 | 亚洲A∨无码国产精品 | 蜜臀av首页| 操干视频 | jizzjizzjizz亚洲女| 大尺度做爰床戏呻吟舒畅 | 水蜜桃av在线 | 全黄一级裸体 | 亚洲av无码一区二区三区dv | 闫嫩的18sex少妇hd | 伊人一区| 欧美日韩啪啪 | 色综合久久88色综合天天 | 激情一区二区 | 国产在线视视频有精品 | 欧洲av片 | 男人影院在线观看 | 涩涩在线看 | av一卡二卡 | 亚洲天堂av片 | 国产二区自拍 | 黄色片在线免费观看视频 | 欧美午夜精品一区二区 | 久久高清国产 | 91九色丨porny丨国产jk | 国产午夜伦鲁鲁 | 女人张开腿让男人桶爽 | 国产对白在线 | sm在线观看 | 国模在线观看 | 欧美香蕉视频 | 丁香久久久 | 婷婷玖玖 | 日本韩国欧美一区二区三区 | 成人av在线网址 | 2021中文字幕| 国产乱子伦一区二区 | 少妇av网 | 天堂在线中文字幕 | 黑人无套内谢中国美女 | 特黄级| 欧美性受xxxx | 天堂男人在线 |