码迷,mamicode.com
首页 > 其他好文 > 详细

卷积(convolution) cvFilter2D

时间:2014-08-14 17:03:09      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:opencv 卷积 cvfilter2d

核心函数:cvFilter2D

原理:

核的中心对准源图像的像素,源图像和核的相对应元素分别相乘并全部相加,得到的值为目标图像核心的值;对于边界则默认用最边界的元素值填充出一个虚拟外边界(相当于调用cvCopyMakeBorder,cvFilter2D内置这个函数)

程序:

bubuko.com,布布扣

代码:

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include <iostream>
int convolution(int argc,char** argv)
{
IplImage* src=cvCreateImage(cvSize(10,10),8,1); //源图像,注意只有CV_8UC1的类型可以修改其中的值,如果为float则不能用cvSet,cvZero或者直接用for语句修改其中的值
//for(int rows=0;rows<src->height;rows++)
//{
//uchar *data=(uchar*)(src->imageData+rows*src->widthStep);
//for(int cols=0;cols<src->width;cols++)
//{
//uchar *result=(uchar *)(data+cols*src->nChannels);
//*result=1;
//}
//}
//cvZero(src);
cvSet(src,cvScalar(1));
IplImage* dst=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
cvZero(dst);
CvMat kernel;
float kerneldata[]={1,1,1,          //核必须为float
              1,1,1,
  1,1,1
};
cvInitMatHeader(&kernel,3,3,CV_32FC1,(void*)kerneldata); //核心必须为浮点型
cvFilter2D(src,dst,&kernel);
std::cout<<"srcMat:"<<std::endl;
for(int rows=0;rows<src->height;rows++)
{
uchar *data=(uchar*)(src->imageData+rows*src->widthStep);
for(int cols=0;cols<src->width;cols++)
{
uchar result=*(data+cols*src->nChannels);
std::cout<<(int)result<<" ";
}
std::cout<<std::endl;
}
std::cout<<"kernelMat:"<<std::endl;
for(int rows=0;rows<kernel.height;rows++)
{
float *data=(float*)(kernel.data.ptr+rows*kernel.step);
for(int cols=0;cols<kernel.width;cols++)
{
float result=*(data+cols);
std::cout<<result<<" ";
}
std::cout<<std::endl;
}
std::cout<<"ConvolutionDstMat:"<<std::endl;
for(int rows=0;rows<dst->height;rows++)
{
uchar *data=(uchar*)(dst->imageData+rows*dst->widthStep);
for(int cols=0;cols<dst->width;cols++)
{
uchar result=*(data+cols*dst->nChannels);
std::cout<<(int)result<<" ";
}
std::cout<<std::endl;
}
return 0;
}


本文出自 “flyclc” 博客,请务必保留此出处http://flyclc.blog.51cto.com/1385758/1539833

卷积(convolution) cvFilter2D,布布扣,bubuko.com

卷积(convolution) cvFilter2D

标签:opencv 卷积 cvfilter2d

原文地址:http://flyclc.blog.51cto.com/1385758/1539833

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!