#include "cv.h"
#include "highgui.h"
//自己编的一个彩色图灰度化的函数,其实在cv中有一个库函数可以直接调用 cvCvtColor(pImg1,pImg2, CV_BGR2GRAY);
void bgrtogray(IplImage* image_src,IplImage* image_des)
{
int w=image_src->width,h=image_src->height;
for (int i=0;i<h;i++) //行
{
for (int k=0;k<w;k++)//列
{
uchar B,G,R;
B=((uchar*)(image_src->imageData + image_src->widthStep*i))[k*image_src->nChannels+0];
G=((uchar*)(image_src->imageData + image_src->widthStep*i))[k*image_src->nChannels+1];
R=((uchar*)(image_src->imageData + image_src->widthStep*i))[k*image_src->nChannels+2];
((uchar*)(image_des->imageData + image_des->widthStep*i))[k]=0.114*B+0.587*G+0.299*R;
}
}
}
//二值化函数
void threshold(int t1,IplImage* image_s,IplImage* image_d)
{
for (int i=0;i< image_s->height;i++) //行
{
for (int j=0;j< image_s->width;j++) //列
{
uchar t=((uchar*)( image_s->imageData + image_s->widthStep*i))[j];
if (t>t1)
((uchar*)( image_d->imageData + image_d->widthStep*i))[j]=255;
else
((uchar*)( image_d->imageData + image_d->widthStep*i))[j]=0;
}
}
}
//两帧图像做差
void absdiff(CvMat* mat_src1,CvMat* mat_src2,CvMat* mat_des)
{
for(int x=0; x< mat_src1->rows; x++) //行
{
for(int y=0; y< mat_src1->cols; y++) //列
{
if (((mat_des->data.fl + mat_des->step/sizeof(float)*x)[y]=
(mat_src1->data.fl + mat_src1->step/sizeof(float)*x)[y]-
(mat_src2->data.fl + mat_src2->step/sizeof(float)*x)[y])>0)
{
(mat_des->data.fl + mat_des->step/sizeof(float)*x)[y]=
(mat_src1->data.fl + mat_src1->step/sizeof(float)*x)[y]-
(mat_src2->data.fl + mat_src2->step/sizeof(float)*x)[y];
}
else
{
(mat_des->data.fl + mat_des->step/sizeof(float)*x)[y]=
(mat_src2->data.fl + mat_src2->step/sizeof(float)*x)[y]-
(mat_src1->data.fl + mat_src1->step/sizeof(float)*x)[y];
}
}
}
}
void main()
{
IplImage* pImg1=NULL; //声明IplImage指针
IplImage* pImg2=NULL;
IplImage* pImg3=NULL;
IplImage* pImg4=NULL;
IplImage* pImg5=NULL;
IplImage* pImg6=NULL;
IplImage* pImg7=NULL;
//载入图像
pImg1 = cvLoadImage( "E:\\图片\\头像\\头像.jpg",1);
pImg4 = cvLoadImage( "E:\\图片\\头像\\背景1.jpg",1);
cvNamedWindow( "Image_src", 1 );//创建窗口
cvShowImage( "Image_src", pImg1 );//显示图像
pImg2= cvCreateImage(cvSize(pImg1->width, pImg1->height),IPL_DEPTH_8U,1);//申请一个空间用于存放灰度化后的图形
pImg3= cvCreateImage(cvSize(pImg1->width, pImg1->height),IPL_DEPTH_8U,1);
pImg5= cvCreateImage(cvSize(pImg1->width, pImg1->height),IPL_DEPTH_8U,1);
pImg6= cvCreateImage(cvSize(pImg1->width, pImg1->height),IPL_DEPTH_8U,1);//申请一个空间用于存放灰度化后的图形
pImg7= cvCreateImage(cvSize(pImg1->width, pImg1->height),IPL_DEPTH_8U,1);
bgrtogray(pImg1,pImg2);
bgrtogray(pImg4,pImg5);
// pFrameMat = cvCreateMat(pImg1->height, pImg1->width, CV_32FC1); //视频输入帧的矩阵形式
// pBkMat = cvCreateMat(pImg4->height, pImg4->width, CV_32FC1);//背景矩阵
// pdes=cvCreateMat(pImg5->height, pImg5->width, CV_32FC1);
cvAbsDiff( pImg2, pImg5 , pImg6 );
threshold(100,pImg2,pImg3);
cvNot(pImg6,pImg7);
cvCvtColor(pImg1,pImg2, CV_BGR2GRAY);
cvNamedWindow( "Image_des", 1 ); //创建窗口
cvShowImage( "Image_des", pImg2 );//显示图像
cvNamedWindow( "Image_tra", 1 ); //创建窗口
cvShowImage( "Image_tra", pImg3 );//显示图像
cvNamedWindow( "Image_debak", 1 ); //创建窗口
cvShowImage( "Image_debak", pImg7);//显示图像
cvWaitKey(0); //等待按键
cvDestroyWindow( "Image_src" );
cvDestroyWindow( "Image_des" );
cvDestroyWindow( "Image_tra" );
cvDestroyWindow( "Image_debak" );//销毁窗口
cvReleaseImage( &pImg1 );
cvReleaseImage( &pImg2 );
cvReleaseImage( &pImg3 );
cvReleaseImage( &pImg4 );
cvReleaseImage( &pImg5 );
cvReleaseImage( &pImg6 );
cvReleaseImage( &pImg7 );//释放图像
//return 0;
}
first_process.rar_背景提取
版权申诉
121 浏览量
2022-09-22
21:26:41
上传
评论
收藏 1.27MB RAR 举报
JonSco
- 粉丝: 76
- 资源: 1万+
最新资源
- 3层别墅图纸D086-三层-15.11&16.30米-施工图.dwg
- TCP 三次握手(Three-Way Handshake) SYN 握手:客户端发送一个带有 SYN(同步序列编号)标志的 T
- 农村小院别墅图D085-三层-15.50&13.80米-施工图.dwg
- tcp三次握手四次挥手
- tcp三次握手四次挥手
- 三层农村小别墅图纸D084-三层-14.00&13.90米-施工图.dwg
- 三层独栋别墅编号D083-三层-14.60&11.50米-施工图.dwg
- 3层独栋别墅D082-三层-10.40&15.90米-施工图.dwg
- 3层独栋别墅编号D081-三层-11.00&11.60米-施工图.dwg
- 3层独栋别墅占地面积140平方米别墅结构.dwg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0