原标题: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