预处理(PreProcessor)模块是BgsLibrary中一个必选的模块,是真正进入背景建模算法的“预处理”过程,其主要功能包括‘去模糊’、‘获得灰度图’、'应用Canny算子‘等可选模块。

下面给出源码:

  1. #include "PreProcessor.h"
  2. namespace bgslibrary
  3. {
  4. PreProcessor::PreProcessor() : firstTime(true), equalizeHist(false), gaussianBlur(false)
  5. {
  6. std::cout << "PreProcessor()" << std::endl;
  7. }
  8. PreProcessor::~PreProcessor()
  9. {
  10. std::cout << "~PreProcessor()" << std::endl;
  11. }
  12. void PreProcessor::setEqualizeHist(bool value)
  13. {
  14. equalizeHist = value;
  15. }
  16. void PreProcessor::setGaussianBlur(bool value)
  17. {
  18. gaussianBlur = value;
  19. }
  20. cv::Mat PreProcessor::getGrayScale()
  21. {
  22. return img_gray.clone();
  23. }
  24. void PreProcessor::process(const cv::Mat &img_input, cv::Mat &img_output)
  25. {
  26. if (img_input.empty())
  27. return;
  28. loadConfig();
  29. if (firstTime)
  30. saveConfig();
  31. img_input.copyTo(img_output);
  32. // Converts image from one color space to another
  33. // http://opencv.willowgarage.com/documentation/cpp/miscellaneous_image_transformations.html#cv-cvtcolor
  34. cv::cvtColor(img_input, img_gray, CV_BGR2GRAY);
  35. //img_gray.copyTo(img_output);
  36. // Equalizes the histogram of a grayscale image
  37. // http://opencv.willowgarage.com/documentation/cpp/histograms.html#cv-equalizehist
  38. if (equalizeHist)
  39. cv::equalizeHist(img_output, img_output);
  40. // Smoothes image using a Gaussian filter
  41. // http://opencv.willowgarage.com/documentation/cpp/imgproc_image_filtering.html#GaussianBlur
  42. if (gaussianBlur)
  43. cv::GaussianBlur(img_output, img_output, cv::Size(7, 7), 1.5);
  44. if (enableShow)
  45. cv::imshow("Pre Processor", img_output);
  46. firstTime = false;
  47. }
  48. void PreProcessor::rotate(const cv::Mat &img_input, cv::Mat &img_output, float angle)
  49. {
  50. IplImage* image = new IplImage(img_input);
  51. //IplImage *rotatedImage = cvCreateImage(cvSize(480,320), IPL_DEPTH_8U, image->nChannels);
  52. //IplImage *rotatedImage = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, image->nChannels);
  53. IplImage* rotatedImage = cvCreateImage(cvSize(image->height, image->width), IPL_DEPTH_8U, image->nChannels);
  54. CvPoint2D32f center;
  55. //center.x = 160;
  56. //center.y = 160;
  57. center.x = (image->height / 2);
  58. center.y = (image->width / 2);
  59. CvMat* mapMatrix = cvCreateMat(2, 3, CV_32FC1);
  60. cv2DRotationMatrix(center, angle, 1.0, mapMatrix);
  61. cvWarpAffine(image, rotatedImage, mapMatrix, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS, cvScalarAll(0));
  62. cv::Mat img_rot(rotatedImage);
  63. img_rot.copyTo(img_output);
  64. cvReleaseImage(&image);
  65. cvReleaseImage(&rotatedImage);
  66. cvReleaseMat(&mapMatrix);
  67. }
  68. void PreProcessor::applyCanny(const cv::Mat &img_input, cv::Mat &img_output)
  69. {
  70. if (img_input.empty())
  71. return;
  72. //------------------------------------------------------------------
  73. // Canny
  74. // Finds edges in an image using Canny algorithm.
  75. // http://opencv.willowgarage.com/documentation/cpp/imgproc_feature_detection.html#cv-canny
  76. //------------------------------------------------------------------
  77. cv::Mat img_canny;
  78. cv::Canny(
  79. img_input, // image ?Single-channel 8-bit input image
  80. img_canny,  // edges ?The output edge map. It will have the same size and the same type as image
  81. 100,       // threshold1 ?The first threshold for the hysteresis procedure
  82. 200);      // threshold2 ?The second threshold for the hysteresis procedure
  83. cv::threshold(img_canny, img_canny, 128, 255, cv::THRESH_BINARY_INV);
  84. img_canny.copyTo(img_output);
  85. }
  86. void PreProcessor::saveConfig()
  87. {
  88. CvFileStorage* fs = cvOpenFileStorage("./config/PreProcessor.xml", 0, CV_STORAGE_WRITE);
  89. cvWriteInt(fs, "equalizeHist", equalizeHist);
  90. cvWriteInt(fs, "gaussianBlur", gaussianBlur);
  91. cvWriteInt(fs, "enableShow", enableShow);
  92. cvReleaseFileStorage(&fs);
  93. }
  94. void PreProcessor::loadConfig()
  95. {
  96. CvFileStorage* fs = cvOpenFileStorage("./config/PreProcessor.xml", 0, CV_STORAGE_READ);
  97. equalizeHist = cvReadIntByName(fs, 0, "equalizeHist", false);
  98. gaussianBlur = cvReadIntByName(fs, 0, "gaussianBlur", false);
  99. enableShow = cvReadIntByName(fs, 0, "enableShow", true);
  100. cvReleaseFileStorage(&fs);
  101. }
  102. }

最后给出此模块的流程框架图供大家参考:

背景建模技术(七):预处理(PreProcessor)模块的更多相关文章

  1. 背景建模技术(三):背景减法库(BGS Library)的基本框架与入口函数main()的功能

    背景减法库(BGS Library = background subtraction library)包含了37种背景建模算法,也是目前国际上关于背景建模技术研究最全也最权威的资料.本文将更加详细的介 ...

  2. 背景建模技术(二):BgsLibrary的框架、背景建模的37种算法性能分析、背景建模技术的挑战

    背景建模技术(二):BgsLibrary的框架.背景建模的37种算法性能分析.背景建模技术的挑战 1.基于MFC的BgsLibrary软件下载 下载地址:http://download.csdn.ne ...

  3. 背景建模技术(六):帧处理(FrameProcessor)模块

    前面几篇文章简单介绍了BgsLibrary的入口函数.视频分析和视频捕获模块,本文将简单介绍帧处理模块,即对每一帧进行处理的函数,也就是真正调用背景建模算法的接口处. 下面贴出源码供大家分析: #in ...

  4. 背景建模技术(五):视频捕获(VideoCapture)模块

    本次对“视频捕获(VideoCapture)模块”做出分析,给出源代码和对应的程序流程框架. 视频捕获模块的主要功能是设置视频或相机参数,并读取设置配置参数,最后进入帧处理模块的process进程,该 ...

  5. 背景建模技术(四):视频分析(VideoAnalysis)模块

    视频分析模块主要包含两个函数,一个是VideoAnalysis::setup(....),其主要功能就是确定测试的视频是视频文件或摄像头输入亦或是采用命令行参数:第二个函数是VideoAnalysis ...

  6. SPSS Modeler数据挖掘项目实战(数据挖掘、建模技术)

    SPSS Modeler是业界极为著名的数据挖掘软件,其前身为SPSS Clementine.SPSS Modeler内置丰富的数据挖掘模型,以其强大的挖掘功能和友好的操作习惯,深受用户的喜爱和好评, ...

  7. 浅析软件工程中的UML建模技术

    一.基本信息 标题:浅析软件工程中的UML建模技术 时间:2018 出版源:电子世界 领域分类:软件工程:UML建模技术:需求分析 二.研究背景 问题定义:软件工程中UML建模技术的研究 难点:明确软 ...

  8. NoSQL 数据建模技术(转)

    本文转载自:http://coolshell.cn/articles/7270.html ================================================ 全文译自墙外 ...

  9. NoSQL数据建模技术

    原文来自“NoSQL Data Modeling Techniques”,由酷壳网陈皓编译<NoSQL数据建模技术>.这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉.我的感觉是 ...

随机推荐

  1. Python 的非正式介绍

    在下面的例子中,通过提示符 (>>> 与 ...) 的出现与否来区分输入和输出:如果你想复现这些例子,当提示符出现后,你必须在提示符后键入例子中的每一个词:不以提示符开头的那些行是解 ...

  2. Spring Cloud(七):配置中心(Git 版与动态刷新)【Finchley 版】

    Spring Cloud(七):配置中心(Git 版与动态刷新)[Finchley 版]  发表于 2018-04-19 |  更新于 2018-04-24 |  Spring Cloud Confi ...

  3. svn服务器 备份,迁移,部署方案

    这次做业务迁移,要从一个云厂商迁移到某云厂商,之前每天到全备svn排到用场了,需要搭建一个全新到svn服务并要做迁移,并实现我们开发机到时时代码同步 一.svn备份有很多种,优劣都不同,百度可查,我采 ...

  4. 关于14道魔鬼js考题的整理

    1.(function(){ return typeof arguments })(); 这里返回时是argument类型,它是个类数组,也就对象,所以是object,准确谁是[object argu ...

  5. CSS3制作各种形状图像(转)

    CSS3制作各种形状图像 浏览:1417 | 更新:2015-05-24 14:43 | 标签:css 1 2 3 4 5 6 7 分步阅读 圆形-椭圆形-三角形-倒三角形=左三角形-右三角形-菱形- ...

  6. HDU 5816 Hearthstone 概率dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5816 Hearthstone Time Limit: 2000/1000 MS (Java/Othe ...

  7. 常用排序算法--java版

    package com.whw.sortPractice; import java.util.Arrays; public class Sort { /** * 遍历一个数组 * @param sor ...

  8. jQuery动态添加li标签并添加属性和绑定事件

    代码如下: <%@page import="java.util.ArrayList"%> <%@ page language="java" c ...

  9. 多线程Worker初尝试

    多线程这个概念,不知道听了多少遍.但是真滴没有去实操过. 前几天看视频听到作者说道关注技术本身,而不是总写业务代码.这几天依然思考着这个问题.于是从头开始重现了html文件的堵塞问题,重现了html文 ...

  10. MVC绕过登陆界面验证时HttpContext.Current.User.Identity.Name取值为空问题解决方法

    Global.asax界面添加如下方法: void FormsAuthentication_Authenticate(object sender, FormsAuthenticationEventAr ...