资源经验分享opencv去除照片红眼

opencv去除照片红眼

2019-12-23 | |  103 |   0

原标题:opencv去除照片红眼

原文来自:CSDN      原文链接:https://blog.csdn.net/weixin_43288132/article/details/103647924


#include#include#include "windows.h"
#includeusing namespace std;
using namespace cv;

int main()
{
	cout << "OpenCV_Version: " << CV_VERSION << endl;//cv版本
	Mat img = imread("D:/opencv_classtask/test_template/redeye.jpg", CV_LOAD_IMAGE_COLOR);//读取图片//图片使用自己的 绝对地址“/”“”要区分
	Mat imgout = img.clone();
	CascadeClassifier eyesCascade("D:/opencv/opencv345/cmake_build/install/etc/haarcascades/haarcascade_eye.xml");//眼睛检测//级联分类器//在自己的cv环境里找下地址
	// Detect eyes 检测眼睛
	std::vectoreyes;
	//前四个参数:输入图像,眼睛结果,表示每次图像尺寸减小的比例,表示每一个目标至少要被检测到4次才算是真的
	//后两个参数:0 | CASCADE_SCALE_IMAGE表示不同的检测模式,最小检测尺寸
	eyesCascade.detectMultiScale(imgout, eyes, 1.3, 4, 0 | CASCADE_SCALE_IMAGE, Size(100, 100));
	// For every detected eye 每只眼睛都进行处理
	
	for (size_t i = 0; i < eyes.size(); i++)
	{
		// Extract eye from the image. 提取眼睛图像
		Mat eye = img(eyes[i]);
		printf("眼睛数量:%dn", i + 1);
		// Split eye image into 3 channels. 颜色分离
		vectorhsv(3);
		split(eye, hsv);
		Mat mask = (hsv[1] < 43);
		Mat mean = hsv[0]-hsv[0];
		mean.copyTo(hsv[2], mask);
		imshow("eyeout", mask);
		Mat eyeout;
		//图像合并
		cv::merge(hsv, eyeout);
		// Copy the fixed eye to the output image.
		// 眼部图像替换
		eyeout.copyTo(imgout(eyes[i]));
	}
	imshow("picture",img);
	imshow("newpicture", imgout);
	//等待用户按键
	waitKey(0);
	return 0;
}

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:StNet: Local and Global Spatial-Temporal Modeling for Action Recognition

下一篇:中文新闻情感分类 Bert-Pytorch-transformers

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...