背景建模技术(七):预处理(PreProcessor)模块
预处理(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);
- // Converts image from one color space to another
- // http://opencv.willowgarage.com/documentation/cpp/miscellaneous_image_transformations.html#cv-cvtcolor
- cv::cvtColor(img_input, img_gray, CV_BGR2GRAY);
- //img_gray.copyTo(img_output);
- // Equalizes the histogram of a grayscale image
- // http://opencv.willowgarage.com/documentation/cpp/histograms.html#cv-equalizehist
- if (equalizeHist)
- cv::equalizeHist(img_output, img_output);
- // Smoothes image using a Gaussian filter
- // http://opencv.willowgarage.com/documentation/cpp/imgproc_image_filtering.html#GaussianBlur
- 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(480,320), IPL_DEPTH_8U, image->nChannels);
- //IplImage *rotatedImage = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, image->nChannels);
- IplImage* rotatedImage = cvCreateImage(cvSize(image->height, image->width), IPL_DEPTH_8U, image->nChannels);
- CvPoint2D32f center;
- //center.x = 160;
- //center.y = 160;
- 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;
- //------------------------------------------------------------------
- // Canny
- // Finds edges in an image using Canny algorithm.
- // http://opencv.willowgarage.com/documentation/cpp/imgproc_feature_detection.html#cv-canny
- //------------------------------------------------------------------
- cv::Mat img_canny;
- cv::Canny(
- img_input, // image ?Single-channel 8-bit input image
- img_canny, // edges ?The output edge map. It will have the same size and the same type as image
- 100, // threshold1 ?The first threshold for the hysteresis procedure
- 200); // threshold2 ?The second threshold for the hysteresis procedure
- 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)模块的更多相关文章
- 背景建模技术(三):背景减法库(BGS Library)的基本框架与入口函数main()的功能
背景减法库(BGS Library = background subtraction library)包含了37种背景建模算法,也是目前国际上关于背景建模技术研究最全也最权威的资料.本文将更加详细的介 ...
- 背景建模技术(二):BgsLibrary的框架、背景建模的37种算法性能分析、背景建模技术的挑战
背景建模技术(二):BgsLibrary的框架.背景建模的37种算法性能分析.背景建模技术的挑战 1.基于MFC的BgsLibrary软件下载 下载地址:http://download.csdn.ne ...
- 背景建模技术(六):帧处理(FrameProcessor)模块
前面几篇文章简单介绍了BgsLibrary的入口函数.视频分析和视频捕获模块,本文将简单介绍帧处理模块,即对每一帧进行处理的函数,也就是真正调用背景建模算法的接口处. 下面贴出源码供大家分析: #in ...
- 背景建模技术(五):视频捕获(VideoCapture)模块
本次对“视频捕获(VideoCapture)模块”做出分析,给出源代码和对应的程序流程框架. 视频捕获模块的主要功能是设置视频或相机参数,并读取设置配置参数,最后进入帧处理模块的process进程,该 ...
- 背景建模技术(四):视频分析(VideoAnalysis)模块
视频分析模块主要包含两个函数,一个是VideoAnalysis::setup(....),其主要功能就是确定测试的视频是视频文件或摄像头输入亦或是采用命令行参数:第二个函数是VideoAnalysis ...
- SPSS Modeler数据挖掘项目实战(数据挖掘、建模技术)
SPSS Modeler是业界极为著名的数据挖掘软件,其前身为SPSS Clementine.SPSS Modeler内置丰富的数据挖掘模型,以其强大的挖掘功能和友好的操作习惯,深受用户的喜爱和好评, ...
- 浅析软件工程中的UML建模技术
一.基本信息 标题:浅析软件工程中的UML建模技术 时间:2018 出版源:电子世界 领域分类:软件工程:UML建模技术:需求分析 二.研究背景 问题定义:软件工程中UML建模技术的研究 难点:明确软 ...
- NoSQL 数据建模技术(转)
本文转载自:http://coolshell.cn/articles/7270.html ================================================ 全文译自墙外 ...
- NoSQL数据建模技术
原文来自“NoSQL Data Modeling Techniques”,由酷壳网陈皓编译<NoSQL数据建模技术>.这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉.我的感觉是 ...
随机推荐
- [SHELL]结构化命令之条件语句
1.if-then语句 #!/bin/bash username="root" if grep $username /etc/passwd then echo "the ...
- Python replace方法并不改变原字符串
直接给出结论:replace方法不会改变原字符串. temp_str = 'this is a test' print(temp_str.replace('is','IS') print(temp_s ...
- Docker学习笔记总结
Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/ 一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...
- 团队选题报告(i know)
一.团队成员及分工 团队名称:I know 团队成员: 陈家权:选题报告word撰写 赖晓连:ppt制作,原型设计 雷晶:ppt制作,原型设计 林巧娜:原型设计,博客随笔撰写 庄加鑫:选题报告word ...
- C++ Mooc学习
# C++远征篇之起航 1.IDE搭建,现在大部分同学都使用devC,devC的debug调试功能特别好用,可以跟踪变量.省去了在中间插入一些输出语句来输出中间变量的麻烦. 2.using names ...
- TCP系列14—重传—4、Karn算法和TSOPT的RTTM
一.Karn算法 在RTT采样测量过程中,如果一个数据包初传后,RTO超时重传,接着收到这个数据包的ACK报文,那么这个ACK报文是对应初传TCP报文还是对应重传TCP报文呢?这个问题就是retran ...
- Java-编译后出现$1.class、$2.class等多个class文件
部署代码的时候,由于自身技术不精和疏忽,导致查询数据没有正常显示, 排除法最后只能是放置部署文件时未包括多出来的$class文件.放上去之后果然好使了,才记录下这个问题... 这是因为在我们写的类中存 ...
- 使用LoadRunner脚本采集Linux性能数据
前面介绍过在LoadRunner的Java协议实现“使用SSH连接Linux”.下面的脚本,是在LoadRunner里连接Linux/Unix远程服务器,收集其磁盘IO的负载到测试结果. 涉及到三个知 ...
- intellij idea 如何将一个普通项目转换为maven项目
1.工程文件下新建文件pom.xml,并填写好内容. 2.在pom.xml 文件上右键 Add as Maven Project.
- Windows资源监控工具大全
在利用LoadRunner进行性能测试的时候,Windows服务器的资源是经常需要监控的对象.其实除了LoadRunner提供的计数器,似乎Window服务器并不像Unix或者Linux提供众多的性能 ...