From 0673dd1fb6feaedef7567b951ae58c8e684675ca Mon Sep 17 00:00:00 2001 From: wwj <3427896184@qq.com> Date: 星期四, 26 六月 2025 15:19:15 +0800 Subject: [PATCH] 日志4 --- /dev/null | 0 Server/汪卫军/code/ImageProcessor.h | 15 +++++++ Server/汪卫军/code/ImageProcessor.cpp | 93 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 0 deletions(-) diff --git "a/Server/\346\261\252\345\215\253\345\206\233/code/ImageProcessor.cpp" "b/Server/\346\261\252\345\215\253\345\206\233/code/ImageProcessor.cpp" new file mode 100644 index 0000000..4148d4e --- /dev/null +++ "b/Server/\346\261\252\345\215\253\345\206\233/code/ImageProcessor.cpp" @@ -0,0 +1,93 @@ +// ImageProcessor.cpp - 照片处理模块实现 +#include "stdafx.h" +#include "ImageProcessor.h" +#include <opencv2/opencv.hpp> + +ImageProcessor::ImageProcessor() {} + +ImageProcessor::~ImageProcessor() {} + +bool ImageProcessor::CropFace(const unsigned char* imageData, int width, int height, + unsigned char*& faceData, int& faceWidth, int& faceHeight) const { + try { + // 创建OpenCV图像 + cv::Mat image(height, width, CV_8UC3, const_cast<unsigned char*>(imageData)); + + // 加载人脸检测器 + cv::CascadeClassifier face_cascade; + if (!face_cascade.load(cv::samples::findFile("haarcascade_frontalface_alt.xml"))) { + std::cerr << "无法加载人脸检测器" << std::endl; + return false; + } + + // 转换为灰度图 + cv::Mat gray; + cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY); + cv::equalizeHist(gray, gray); + + // 检测人脸 + std::vector<cv::Rect> faces; + face_cascade.detectMultiScale(gray, faces, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30)); + + if (faces.empty()) { + return false; + } + + // 获取第一个检测到的人脸 + cv::Rect face_rect = faces[0]; + cv::Mat face = image(face_rect); + + // 保存人脸数据 + faceWidth = face.cols; + faceHeight = face.rows; + size_t dataSize = faceWidth * faceHeight * 3; + + faceData = new unsigned char[dataSize]; + memcpy(faceData, face.data, dataSize); + + return true; + } + catch (const std::exception& e) { + std::cerr << "裁剪人脸失败: " << e.what() << std::endl; + return false; + } +} + +bool ImageProcessor::EnhanceQuality(unsigned char* imageData, int width, int height) const { + try { + // 创建OpenCV图像 + cv::Mat image(height, width, CV_8UC3, imageData); + + // 图像增强处理 + cv::Mat enhanced; + cv::GaussianBlur(image, enhanced, cv::Size(0, 0), 3); + cv::addWeighted(image, 1.5, enhanced, -0.5, 0, enhanced); + + // 复制回原始数据 + memcpy(imageData, enhanced.data, width * height * 3); + + return true; + } + catch (const std::exception& e) { + std::cerr << "增强图像质量失败: " << e.what() << std::endl; + return false; + } +} + +bool ImageProcessor::ValidateImage(const unsigned char* imageData, int width, int height) const { + try { + // 简单验证:检查图像尺寸是否合理 + if (width < 10 || height < 10) { + return false; + } + + // 这里可以添加更复杂的图像验证逻辑 + // 例如:检查图像是否模糊、是否包含人脸等 + + return true; + } + catch (const std::exception& e) { + std::cerr << "验证图像失败: " << e.what() << std::endl; + return false; + } +} \ No newline at end of file diff --git "a/Server/\346\261\252\345\215\253\345\206\233/code/ImageProcessor.h" "b/Server/\346\261\252\345\215\253\345\206\233/code/ImageProcessor.h" new file mode 100644 index 0000000..2a5727b --- /dev/null +++ "b/Server/\346\261\252\345\215\253\345\206\233/code/ImageProcessor.h" @@ -0,0 +1,15 @@ +// ImageProcessor.h - 照片处理模块 +#pragma once +#include <string> +#include "FaceImageManager.h" + +class ImageProcessor { +public: + ImageProcessor(); + ~ImageProcessor(); + + bool CropFace(const unsigned char* imageData, int width, int height, + unsigned char*& faceData, int& faceWidth, int& faceHeight) const; + bool EnhanceQuality(unsigned char* imageData, int width, int height) const; + bool ValidateImage(const unsigned char* imageData, int width, int height) const; +}; \ No newline at end of file diff --git "a/Server/\346\261\252\345\215\253\345\206\233/code/\351\234\200\346\261\202\345\210\206\346\236\220\346\226\207\346\241\243.doc" "b/Server/\346\261\252\345\215\253\345\206\233/code/\351\234\200\346\261\202\345\210\206\346\236\220\346\226\207\346\241\243.doc" deleted file mode 100644 index f4b04c3..0000000 --- "a/Server/\346\261\252\345\215\253\345\206\233/code/\351\234\200\346\261\202\345\210\206\346\236\220\346\226\207\346\241\243.doc" +++ /dev/null Binary files differ -- Gitblit v1.8.0