wwj
2025-06-26 0673dd1fb6feaedef7567b951ae58c8e684675ca
日志4
2个文件已添加
1个文件已删除
108 ■■■■■ 已修改文件
Server/汪卫军/code/ImageProcessor.cpp 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Server/汪卫军/code/ImageProcessor.h 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Server/汪卫军/code/需求分析文档.doc 补丁 | 查看 | 原始文档 | blame | 历史
Server/ÍôÎÀ¾ü/code/ImageProcessor.cpp
New file
@@ -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;
    }
}
Server/ÍôÎÀ¾ü/code/ImageProcessor.h
New file
@@ -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;
};
Server/ÍôÎÀ¾ü/code/ÐèÇó·ÖÎöÎĵµ.doc
Binary files differ