预处理(PreProcessor)模块是BgsLibrary中一个必选的模块,是真正进入背景建模算法的“预处理”过程,其主要功能包括‘去模糊’、‘获得灰度图’、‘应用Canny算子‘等可选模块。
下面给出源码:
- #include "PreProcessor.h"
-
- namespace bgslibrary
- {
- PreProcessor::PreProcessor() : firstTime(true), equalizeHist(false), gaussianBlur(false)
- {
- std::cout << "PreProcessor()" << std::endl;
- }
-
- PreProcessor::~PreProcessor()
- {
- std::cout << "~PreProcessor()" << std::endl;
- }
-
- void PreProcessor::setEqualizeHist(bool value)
- {
- equalizeHist = value;
- }
-
- void PreProcessor::setGaussianBlur(bool value)
- {
- gaussianBlur = value;
- }
-
- cv::Mat PreProcessor::getGrayScale()
- {
- return img_gray.clone();
- }
-
- void PreProcessor::process(const cv::Mat &img_input, cv::Mat &img_output)
- {
- if (img_input.empty())
- return;
-
- loadConfig();
-
- if (firstTime)
- saveConfig();
-
- img_input.copyTo(img_output);
-
-
-
- cv::cvtColor(img_input, img_gray, CV_BGR2GRAY);
-
-
-
-
- if (equalizeHist)
- cv::equalizeHist(img_output, img_output);
-
-
-
- if (gaussianBlur)
- cv::GaussianBlur(img_output, img_output, cv::Size(7, 7), 1.5);
-
- if (enableShow)
- cv::imshow("Pre Processor", img_output);
-
- firstTime = false;
- }
-
- void PreProcessor::rotate(const cv::Mat &img_input, cv::Mat &img_output, float angle)
- {
- IplImage* image = new IplImage(img_input);
-
-
-
- IplImage* rotatedImage = cvCreateImage(cvSize(image->height, image->width), IPL_DEPTH_8U, image->nChannels);
-
- CvPoint2D32f center;
-
-
- center.x = (image->height / 2);
- center.y = (image->width / 2);
-
- CvMat* mapMatrix = cvCreateMat(2, 3, CV_32FC1);
-
- cv2DRotationMatrix(center, angle, 1.0, mapMatrix);
- cvWarpAffine(image, rotatedImage, mapMatrix, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS, cvScalarAll(0));
-
- cv::Mat img_rot(rotatedImage);
- img_rot.copyTo(img_output);
-
- cvReleaseImage(&image);
- cvReleaseImage(&rotatedImage);
- cvReleaseMat(&mapMatrix);
- }
-
- void PreProcessor::applyCanny(const cv::Mat &img_input, cv::Mat &img_output)
- {
- if (img_input.empty())
- return;
-
-
-
-
-
-
-
- cv::Mat img_canny;
- cv::Canny(
- img_input,
- img_canny,
- 100,
- 200);
- cv::threshold(img_canny, img_canny, 128, 255, cv::THRESH_BINARY_INV);
-
- img_canny.copyTo(img_output);
- }
-
- void PreProcessor::saveConfig()
- {
- CvFileStorage* fs = cvOpenFileStorage("./config/PreProcessor.xml", 0, CV_STORAGE_WRITE);
-
- cvWriteInt(fs, "equalizeHist", equalizeHist);
- cvWriteInt(fs, "gaussianBlur", gaussianBlur);
- cvWriteInt(fs, "enableShow", enableShow);
-
- cvReleaseFileStorage(&fs);
- }
-
- void PreProcessor::loadConfig()
- {
- CvFileStorage* fs = cvOpenFileStorage("./config/PreProcessor.xml", 0, CV_STORAGE_READ);
-
- equalizeHist = cvReadIntByName(fs, 0, "equalizeHist", false);
- gaussianBlur = cvReadIntByName(fs, 0, "gaussianBlur", false);
- enableShow = cvReadIntByName(fs, 0, "enableShow", true);
-
- cvReleaseFileStorage(&fs);
- }
- }
最后给出此模块的流程框架图供大家参考:

背景建模技术(七):预处理(PreProcessor)模块
原文:http://www.cnblogs.com/ywsoftware/p/4511787.html