基本信息
源码名称:基于QT+Opencv的红眼去除
源码大小:1.78M
文件格式:.zip
开发语言:C/C++
更新时间:2021-05-28
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
实验包括打开图像、红眼去除、保存处理后图像到指定位置,由于是初学,能实现功能已经很不错了,我的程序不够完美,运行前需要把图片和xml文件改为绝对路径

ImageConversion imgConversion;
 if(!pixmapL.isNull()){
 // Read image 读彩色图像
 Mat img = imread("F:/Qt/hongyanshiyan/hongyan/red_eyes1.jpg", CV_LOAD_IMAGE_COLOR);

 // Output image 输出图像
 Mat imgOut = img.clone();

 // Load HAAR cascade 读取haar分类器
 CascadeClassifier eyesCascade("E:/openCV/openCVwithContrib-3.3.1build/install/etc/haarcascades/haarcascade_eye.xml");

 // Detect eyes 检测眼睛
 std::vector<Rect> eyes;
 //前四个参数:输入图像,眼睛结果,表示每次图像尺寸减小的比例,表示每一个目标至少要被检测到4次才算是真的
 //后两个参数:0 | CASCADE_SCALE_IMAGE表示不同的检测模式,最小检测尺寸
 eyesCascade.detectMultiScale(img, 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]);

 // Split eye image into 3 channels. 颜色分离
 vector<Mat>bgr(3);
 split(eye, bgr);

 // Simple red eye detector 红眼检测器,获得结果掩模
 Mat mask = (bgr[2] > 150) & (bgr[2] > (bgr[1]   bgr[0]));

 // Clean mask 清理掩模
 //填充孔洞
 fillHoles(mask);
 //扩充孔洞
 dilate(mask, mask, Mat(), Point(-1, -1), 3, 1, 1);

 // Calculate the mean channel by averaging the green and blue channels
 //计算b通道和g通道的均值
 Mat mean = (bgr[0]   bgr[1]) / 2;
 //用该均值图像覆盖原图掩模部分图像
 mean.copyTo(bgr[2], mask);
 mean.copyTo(bgr[0], mask);
 mean.copyTo(bgr[1], mask);

 // Merge channels
 Mat eyeOut;
 //图像合并
 cv::merge(bgr, eyeOut);

 // Copy the fixed eye to the output image.
 // 眼部图像替换
 eyeOut.copyTo(imgOut(eyes[i]));