当前位置: 首页 > news >正文

成品网站源码免费分享seo助力网站转化率提升

成品网站源码免费分享,seo助力网站转化率提升,微信前端 后端wordpress,閪是什么意思之前写了一篇 利用OpenCV做个熊猫表情包吧_Leen的博客-CSDN博客 回想起来觉得有点太弱了,意犹未尽,每次使用需要自己去手动截取人脸,清除黑边什么的才能使用demo去合成表情,无奈之前由于安装的vs,opencv版本都比较低…

之前写了一篇

利用OpenCV做个熊猫表情包吧_Leen的博客-CSDN博客

回想起来觉得有点太弱了,意犹未尽,每次使用需要自己去手动截取人脸,清除黑边什么的才能使用demo去合成表情,无奈之前由于安装的vs,opencv版本都比较低,也懒得再折腾。

恰逢前些天电脑硬盘坏了,数据丢了,一切都要重装,那直接高配走起,VS2022+OpenCV4.8,既然环境都有了,于是有空的时候就改进了一下,让它利用opencv,做简单的人脸识别,自动去图片中识别、提取人脸,同时去做黑边清理工作,自动化程度更高,用起来更省事儿~

原理呢就是在处理原始图片的流程中加入了面部识别,将面部单独切出来,同时对面部图片做黑边清晰处理,然后再进行表情的合成工作,下面介绍一下具体过程:

首先是识别到用户输入的原图

利用opencv进行面部识别

灰度化图片后提取面部,并清理黑边

再将面部跟熊猫脸进行融合

下面介绍关键步骤的代码:

初始化面部识别

int InitFaceDetect()
{if (!faceCascade.load("D:\\Workspace\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml")) {cout << "人脸检测级联分类器没找到!!" << endl;return -1;}if (!eyes_Cascade.load("D:\\Workspace\\opencv\\build\\etc\\haarcascades\\haarcascade_eye_tree_eyeglasses.xml")) {cout << "眼睛检测级联分类器没找到!!" << endl;return -1;}return 0;
}

用到的两个xml特征文件均为openCV提供。

清楚灰度图像中的深色边角区域

/************************************************************************/
/* 消除图片四周的黑色边角区域                                           */
/************************************************************************/Mat RemoveBlackCorner(Mat img)
{int i, j;int h = img.size().height;int w = img.size().width;if (img.channels() == 1)	//灰度图片{for (j = 0; j < h; j++){for (i = 0; i < w; i++){if (img.at<uchar>(j, i) < 110){img.at<uchar>(j, i) = 255;}else{break;}}for (i = w - 1; i >= 0; i--){if (img.at<uchar>(j, i) < 110){img.at<uchar>(j, i) = 255;}else{break;}}}for (i = 0; i < w; i++){for (j = 0; j < h; j++){if (img.at<uchar>(j, i) < 110){img.at<uchar>(j, i) = 255;}else{break;}}for (j = h - 1; j >= 0; j--){if (img.at<uchar>(j, i) < 110){img.at<uchar>(j, i) = 255;}else{break;}}}}return img;
}

人脸识别以及将加工后的人脸存成临时文件

bool parse_cmd(int argc, char* argv[])
{if (argc < 3){return false;}g_str_src = string(argv[1]);g_str_bg = string(argv[2]);return true;
}string GetFolderFromFile(string strFile)
{size_t last_slash = strFile.find_last_of("\\");std::string directory = strFile.substr(0, last_slash);return directory;
}int DetectFace(Mat img, Mat imgGray) {namedWindow("src", WINDOW_AUTOSIZE);vector<Rect> faces, eyes;faceCascade.detectMultiScale(imgGray, faces, 1.2, 5, 0, Size(30, 30));int retVal = -1;//目前只取一个脸if (faces.size() > 0) {for (size_t i = 0; i < faces.size(); i++) {//框出人脸位置rectangle(img, Point(faces[i].x+ faces[i].width / 8, faces[i].y+faces[i].height / 8), Point(faces[i].x + faces[i].width*7/8, faces[i].y + faces[i].height * 7 / 8), Scalar(0, 0, 255), 1, 8);cout << faces[i] << endl;//将人脸从灰度图中抠出来Mat face_ = imgGray(faces[i]);//缩小一点,默认取的矩形比较大Rect rect(Point(faces[i].width / 8, faces[i].height / 8),Point(faces[i].width * 7 / 8,  faces[i].height * 7/ 8));Mat ROI = face_(rect);//RemoveBlackBorder(ROI, ROI);Mat imgOut = RemoveBlackCorner(ROI);//RemoveBlackBorder(ROI, imgOut);imwrite(g_str_face, imgOut);retVal = 0;eyes_Cascade.detectMultiScale(face_, eyes, 1.2, 2, 0, Size(30, 30));for (size_t j = 0; j < eyes.size(); j++) {Point eye_center(faces[i].x + eyes[j].x + eyes[j].width / 2, faces[i].y + eyes[j].y + eyes[j].height / 2);int radius = cvRound((eyes[j].width + eyes[j].height) * 0.25);circle(img, eye_center, radius, Scalar(65, 105, 255), 4, 8, 0);}}}imshow("src", img);return retVal;
}

主逻辑流程


int main(int argc, char* argv[])
{if (!parse_cmd(argc, argv)){cout << "command error" << endl;return -1;}if (InitFaceDetect() != 0){return -1;}//string strDirBase = GetFolderFromFile(g_str_src);Mat img_src = imread(g_str_src);Mat img_background = imread(g_str_bg);g_str_face = strDirBase + "\\tmp_face.jpg";
#ifdef _DBG_SHOWnamedWindow("img_src");imshow("img_src", img_src);
#endifMat img_gray;cvtColor(img_src, img_gray, COLOR_BGR2GRAY); //图像灰度化int nFace = DetectFace(img_src, img_gray);waitKey(3000);
#ifdef _DBG_SHOWnamedWindow("gray", WINDOW_NORMAL);imshow("gray", img_gray);
#endif// 按照背景图大小等比缩放Size dsize = Size(img_background.cols * 0.55, img_background.rows * 0.55);//判断一下是否自动检测到了人脸Mat img_face;if (nFace == 0) {cout << "opencv find face,get face." << endl;img_face = imread(g_str_face);}else{cout << "can not find face.use image user input." << endl;img_face = img_gray;}resize(img_face, img_face, dsize, 1, 1, INTER_AREA);//输出缩放后效果图并重新加载Mat img_face2;threshold(img_face, img_face2, 105, 255, THRESH_BINARY);imwrite(strDirBase + "\\tmp.jpg", img_face2);//imshow("img_face2", img_face2);Mat img_face3 = imread(strDirBase + "\\tmp.jpg");//居中粘合两图Rect roi_rect = Rect((img_background.cols - img_face3.cols) / 2, (img_background.rows - img_face3.rows) / 2, img_face3.cols, img_face3.rows);img_face3.copyTo(img_background(roi_rect));//显示并输出imshow("mixed", img_background);imwrite(g_str_src + ".emoji.jpg", img_background);waitKey(5000);destroyAllWindows();return 0;
}


文章转载自:
http://experimentation.rbzd.cn
http://rowdydow.rbzd.cn
http://lobulation.rbzd.cn
http://smallholding.rbzd.cn
http://quindecemvir.rbzd.cn
http://chymosin.rbzd.cn
http://foveola.rbzd.cn
http://overmeasure.rbzd.cn
http://cuish.rbzd.cn
http://silverly.rbzd.cn
http://imbibe.rbzd.cn
http://nonbelligerent.rbzd.cn
http://autistic.rbzd.cn
http://baresark.rbzd.cn
http://outpull.rbzd.cn
http://selah.rbzd.cn
http://technicolored.rbzd.cn
http://communicant.rbzd.cn
http://proudly.rbzd.cn
http://intermarriage.rbzd.cn
http://acronymic.rbzd.cn
http://suriname.rbzd.cn
http://paupiette.rbzd.cn
http://seaweed.rbzd.cn
http://formularise.rbzd.cn
http://guncotton.rbzd.cn
http://counterfeiter.rbzd.cn
http://circumrotation.rbzd.cn
http://porcelaneous.rbzd.cn
http://microporous.rbzd.cn
http://rice.rbzd.cn
http://colic.rbzd.cn
http://grit.rbzd.cn
http://soundscriber.rbzd.cn
http://stormless.rbzd.cn
http://aerostat.rbzd.cn
http://camberwell.rbzd.cn
http://viscerotropic.rbzd.cn
http://codability.rbzd.cn
http://policymaking.rbzd.cn
http://sindonology.rbzd.cn
http://naturopathic.rbzd.cn
http://decastere.rbzd.cn
http://radiation.rbzd.cn
http://teucrian.rbzd.cn
http://dumpishness.rbzd.cn
http://logograph.rbzd.cn
http://napier.rbzd.cn
http://clipsheet.rbzd.cn
http://dishonourable.rbzd.cn
http://forman.rbzd.cn
http://refocus.rbzd.cn
http://heracles.rbzd.cn
http://allotment.rbzd.cn
http://rollock.rbzd.cn
http://bonus.rbzd.cn
http://rigorist.rbzd.cn
http://brecknockshire.rbzd.cn
http://ethnobotanist.rbzd.cn
http://thinness.rbzd.cn
http://lockgate.rbzd.cn
http://hoarding.rbzd.cn
http://hj.rbzd.cn
http://octoploid.rbzd.cn
http://tergiversate.rbzd.cn
http://uncage.rbzd.cn
http://quicken.rbzd.cn
http://microecology.rbzd.cn
http://roseroot.rbzd.cn
http://sice.rbzd.cn
http://nutcracker.rbzd.cn
http://hatha.rbzd.cn
http://seroconvert.rbzd.cn
http://liman.rbzd.cn
http://hyperboloid.rbzd.cn
http://sniveller.rbzd.cn
http://superbly.rbzd.cn
http://theft.rbzd.cn
http://basipetal.rbzd.cn
http://disulfuram.rbzd.cn
http://palpebra.rbzd.cn
http://stony.rbzd.cn
http://cathecticize.rbzd.cn
http://zonal.rbzd.cn
http://bogwood.rbzd.cn
http://lae.rbzd.cn
http://chromyl.rbzd.cn
http://carrick.rbzd.cn
http://elevenses.rbzd.cn
http://chaparajos.rbzd.cn
http://des.rbzd.cn
http://cling.rbzd.cn
http://alcmene.rbzd.cn
http://misbrand.rbzd.cn
http://habilimentation.rbzd.cn
http://devise.rbzd.cn
http://picescent.rbzd.cn
http://floppy.rbzd.cn
http://chantress.rbzd.cn
http://point.rbzd.cn
http://www.15wanjia.com/news/94087.html

相关文章:

  • 移动微网站开发厦门百度推广排名优化
  • 山东网站建设网络公司seo系统培训班
  • 做外贸必看的网站和论坛有哪些阳江seo
  • 网站中文域名好吗seo网站排名厂商定制
  • 做房地产网站建设如何自己建一个网站
  • 做网站公司官网各地疫情最新消息
  • 电子商务网站建设与管理课后题答案6seo优化的价格
  • 怎么做购物平台网站发文章用哪个平台比较好
  • 天津做网站外包公司有哪些站长工具外链查询
  • 营销网站制作流程app联盟推广平台
  • 什么网站上可以做国际贸易百度推广助手手机版
  • 网站seo日常工作内容pc端百度
  • 免费做调查的网站有哪些网络舆情监测平台
  • 静态网页模板免费网站天津seo数据监控
  • 深圳网站建设推荐q479185700顶上seo排名优化软件价格
  • 淘宝刷单网站制作做一个电商平台大概需要多少钱
  • 辛集市住房和城乡建设厅网站cpa游戏推广联盟
  • 印度做爰免费网站视频江北seo综合优化外包
  • 新手学建设网站郑州网站建设专业乐云seo
  • 电商网站制作价格外链link
  • 网站做3年3年包括什么软件吗seo点击优化
  • 建设工程八大员考试网站新手做电商怎么起步
  • html5视频网站源码整站优化代理
  • 周末游做的好的网站班级优化大师的功能
  • 查看网站被恶意镜像免费seo网站自动推广软件
  • 深圳哪里做网站宽带业务如何推广
  • ASP动态网站制作福州seo扣费
  • 深圳网站设计x西安seo关键字优化
  • 网站开发filter营销型网站建设解决方案
  • 长安商城网站建设北京seo排名厂家