图像代数运算:平均值去噪,减去背景
代数运算,就是对两幅图像的点之间进行加、减、乘、除的运算。四种运算相应的公式为:
代数运算中比较常用的是图像相加和相减。图像相加常用来求平均值去除addtive噪声或者实现二次曝光(double-exposure)。图像相减用于减去背景或周期噪声,污染等。
图像相加
- void cvAcc(
- const CvArr* image,//输入图像
- CvArr* sum, //累积图像
- const CvArr* mask=NULL//可选的运算
- );
我们还需要用到一个线性变换转换函数来对相加的结果求平均
- void cvConvertScale(
- const CvArr* src, //输入数组
- CvArr* dst,//输出数组
- double scale=1,//比例
- double shift=0 //缩放比例,可选
- );
- #define cvCvtScale cvConvertScale
- #define cvScale cvConvertScale
- #define cvConvert( src, dst ) cvConvertScale( (src), (dst), 1, 0 )
实践:平均值去噪
- int main()
- {
- CvCapture* capture=cvCaptureFromFile("media.avi");
- IplImage* frame= NULL;
- IplImage * imgsum =NULL;
- int start=301;
- int end=304;
- cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, start);
- int count = start;
- while( cvGrabFrame(capture) && count <= end )
- {
- frame = cvRetrieveFrame(capture);// 获取当前帧
- if(imgsum==NULL){
- imgsum=cvCreateImage(cvGetSize(frame),IPL_DEPTH_32F,3);
- cvZero(imgsum);
- }
- cvAcc(frame,imgsum);
- char testname[100];
- sprintf(testname,"%s%d%s","image",count,".jpg");
- cvShowImage(testname,frame);
- cvSaveImage(testname,frame);
- count++;
- }
- IplImage * imgavg = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3);
- cvConvertScale(imgsum,imgavg,1.0/4.0);
- cvShowImage("imageavg",imgavg);
- cvSaveImage("imageavg_4.jpg",imgavg);
- cvWaitKey(0);
- cvReleaseCapture(&capture);
- return 0;
- }
以下从左到右分别是连续两帧、四帧、八帧、十六帧求均值的结果:
实践:图像二次曝光
- //通过求平均二次曝光
- int main()
- {
- IplImage* image1= cvLoadImage("psu3.jpg");
- IplImage* image2= cvLoadImage("psu4.jpg");
- IplImage * imgsum =cvCreateImage(cvGetSize(image1),IPL_DEPTH_32F,3);
- cvZero(imgsum);
- cvAcc(image1,imgsum);
- cvAcc(image2,imgsum);
- IplImage * imgavg = cvCreateImage(cvGetSize(image1),IPL_DEPTH_8U,3);
- cvConvertScale(imgsum,imgavg,1.0/2.0);
- cvShowImage("imageavg",imgavg);
- cvSaveImage("avg.jpg",imgavg);
- cvWaitKey(0);
- cvReleaseImage(&image1);
- cvReleaseImage(&image2);
- cvReleaseImage(&imgsum);
- cvReleaseImage(&imgavg);
- return 0;
- }
下图是对同学街舞截图的“二次曝光”效果:
图像相减
- void cvAbsDiff(
- const CvArr* src1,//第一个输入数组
- const CvArr* src2,//第二个输入数组
- CvArr* dst//输出数组
- );
实践:减去背景
- //减去背景
- int main()
- {
- IplImage* pFrame = NULL;
- IplImage* pFrImg = NULL;
- IplImage* pBkImg = NULL;
- CvMat* pFrameMat = NULL;
- CvMat* pFrMat = NULL;
- CvMat* pBkMat = NULL;
- CvCapture* pCapture = NULL;
- int nFrmNum = 0;
- //创建窗口
- cvNamedWindow("video", 1);
- cvNamedWindow("background",1);
- cvNamedWindow("foreground",1);
- pCapture = cvCaptureFromFile("media.avi");
- while(pFrame = cvQueryFrame( pCapture ))
- {
- nFrmNum++;
- //如果是第一帧,需要申请内存,并初始化
- if(nFrmNum == 1)
- {
- pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
- pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
- pBkMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
- pFrMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
- pFrameMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
- //转化成单通道图像再处理
- cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);
- cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);
- cvConvert(pFrImg, pFrameMat);
- cvConvert(pFrImg, pFrMat);
- cvConvert(pFrImg, pBkMat);
- }
- else
- {
- cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);
- cvConvert(pFrImg, pFrameMat);
- //当前帧跟背景图相减
- cvAbsDiff(pFrameMat, pBkMat, pFrMat);
- //二值化前景图
- cvThreshold(pFrMat, pFrImg, 60, 255.0, CV_THRESH_BINARY);
- //更新背景
- cvRunningAvg(pFrameMat, pBkMat, 0.003, 0);
- //将背景转化为图像格式,用以显示
- cvConvert(pBkMat, pBkImg);
- cvShowImage("video", pFrame);
- cvShowImage("background", pBkImg);
- cvShowImage("foreground", pFrImg);
- if( cvWaitKey(2) >= 0 )
- break;
- }
- }
- cvDestroyWindow("video");
- cvDestroyWindow("background");
- cvDestroyWindow("foreground");
- cvReleaseImage(&pFrImg);
- cvReleaseImage(&pBkImg);
- cvReleaseMat(&pFrameMat);
- cvReleaseMat(&pFrMat);
- cvReleaseMat(&pBkMat);
- cvReleaseCapture(&pCapture);
- return 0;
- }
效果图:
转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7610665
实验代码及视频下载:http://download.csdn.net/detail/xiaowei_cqu/4335573
图像代数运算:平均值去噪,减去背景相关推荐
- 【OpenCV】图像代数运算:平均值去噪,减去背景
代数运算,就是对两幅图像的点之间进行加.减.乘.除的运算.四种运算相应的公式为: 代数运算中比较常用的是图像相加和相减.图像相加常用来求平均值去除addtive噪声或者实现二次曝光(double-ex ...
- 学习使用非局部平均值去噪算法去除图像中的噪音-图像去噪
图像去噪 目标 • 学习使用非局部平均值去噪算法去除图像中的噪音 • 学习函数 cv2.fastNlMeansDenoising(),cv2.fastNlMeansDenoisingColored() ...
- 去毛边 叶片图像_一种复杂背景叶片图像的全自动分割方法与流程
本发明涉及图像处理领域,更具体地,涉及一种复杂背景叶片图像的全自动分割方法. 背景技术: 药用植物,是中药材的主要来源,是中医药治病救人的物质基础.然而,近年来,由于生态环境的恶化,药用植物资源显著萎 ...
- python之筛选图像中是否存在黑白背景
python之筛选图像中是否存在黑白背景 紧接上篇文章的需求,需要进行功能增加 某些图片存在背景丢失问题,出现黑白背景现象,这种需要排查,同样交给了自动化处理. 这次不比上次了,我搜罗了一堆资料,全是 ...
- Android基于图像语义分割实现人物背景更换
原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 本文链接:Android基于 ...
- python数字图像处理-图像噪声与去噪算法
图像噪声 椒盐噪声 概述: 椒盐噪声(salt & pepper noise)是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素.椒盐噪声是一种 ...
- (100天2小时第二十九天)几种常见的图像噪声及去噪处理算法
一.背景 在图像获取.传输.存储过程中常常会受到各种噪声的干扰,从而影响图像的质量.并且图像预处理算法的好坏又直接关系到后续图像处理的效果,如图像分割.目标识别.边缘处理等,所以为了获得高质量数字图像 ...
- 图像降噪(去噪)是什么原理?
文章目录 噪声的产生及分类 图象降噪的方法简介编辑 均值滤波器 自适应维纳滤波器 中值滤波器 形态学噪声滤除器 小波去噪 噪声的产生及分类 噪声是图像干扰的重要原因.一幅图像在实际应用中可能存在各种各 ...
- OpenCV计算图像的平均值和标准差的函数meanStdDev函数的使用
计算一个矩阵的平均值和标准差,每个通道都是独立的,通过以下输出参数获取返回值: [N=∑I,mask(I)≠01meanc=∑I:mask(I)≠0src(I)cNstddevc=∑I:mask(I) ...
最新文章
- 音高和基频(Pitch and F0)
- Java Scala 混合编程导致 编译失败 ,【找不到符号】问题解决
- 爱回收回应下架通报:认真整改 切实落实用户隐私信息保护
- swift python javascript_最小的Swift App
- matlab retinex,基于Retinex算法视频增强的MATLAB实现
- MySQL数据库面试题(2020最新版)
- EPUB PDF DOCX格式转换及主流格式电子书制作终极攻略(内含用WORD制作精美EPUB方法)...
- freeswitch cdr mysql_freeswitch XML CDRS
- java中的传参是什么意思_Java中参数传递是传值还是传址?
- python输入一个数组、以逗号为间隔_python-使用间隔掩码numpy数组
- RLS算法-公式初探
- IPA包重签企业证书
- webstorm 扩大内存
- 服务器响应状态码statusCode
- BCH编码(15,5)1bit串行,5bit并行
- 华为服务器2288H v3和V5关机不能启动处理
- python输出一个函数多项式_python实现PolynomialFeatures多项式的方法
- 马斯克:特斯拉汽车卡拉OK功能即将推出
- div的display属性和visibility属性
- MyBatis SQL语句详解
热门文章
- 如何让神经网络把熊猫识别为秃鹫
- Gartner 2015新兴技术发展周期简评:大数据实用化、机器学习崛起
- [搜索]一种分词的实现(2)
- jvm性能调优实战 - 49OOM异常进行监控以及online处理
- 白话Elasticsearch73_ES生产集群中的索引管理02
- 并发编程-17AQS同步组件之 Semaphore 控制并发线程数的信号量
- Redis-04Redis数据结构--哈希hash
- Java学习笔记(五)--流程控制
- windows powershell实战指南_【安全研究】powershell在主机中是否存在安全隐患?
- 深入理解ROS技术 【4】ROS下的模块详解(181-232)