好記性不如爛筆頭,紀錄工作與生活上遭遇的點點滴滴。
#include #include #include #include using namespace std;void convolution(IplImage *src,IplImage *dst,int sigma,IplImage *dst1,IplImage *dst2){ double temp=0.0; double value=0.0; CvScalar point_dst_all,point_dst_com,A,B; point_dst_com=cvScalar(0,0,0); point_dst_all=cvScalar(0,0,0); int size=(6*sigma)+1; int half=((6*sigma)/2); double *arr = new double[size]; for(int x=-half;x<=half;x++) { temp =-(((double)x*(double)x)/((double)2*(double)sigma*(double)sigma)); value=(-((double)x/((double)sigma*(double)sigma))*(exp(temp))); *(arr+(x+half))=value; } for(int i=0;iheight;h++) { for(int w=half;wwidth-size;w++) { point_dst_com=cvScalar(0,0,0); point_dst_all=cvScalar(0,0,0); for(int i=0;iheight-size;h++) { for(int w=0;wwidth-size;w++) { point_dst_com=cvScalar(0,0,0); point_dst_all=cvScalar(0,0,0); for(int i=0;iheight;h++) { for(int w=0;wwidth;w++) { A=cvGet2D(dst1,h,w); B=cvGet2D(dst2,h,w); A.val[0]=A.val[0]+B.val[0]; cvSet2D(dst,h,w,A); } }delete [] arr;}int main(){ int sigma; cout<<"請輸入標準差:"<>sigma; int size=(6*sigma)+1; IplImage *src, *pic_smooth_sigma; src=cvLoadImage("D:\\img\\Motocycle.bmp",0); pic_smooth_sigma=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);//IPL_DEPTH_64F IplImage *dst =cvCreateImage( cvSize(src->width,src->height),IPL_DEPTH_8U,1); IplImage *dst1 =cvCreateImage( cvSize(src->width,src->height),IPL_DEPTH_8U,1); IplImage *dst2 =cvCreateImage( cvSize(src->width,src->height),IPL_DEPTH_8U,1); CvScalar point_dst_all,point_dst_com; //cvCvtColor(src,dst,CV_BGR2GRAY); cvSmooth(src,pic_smooth_sigma,CV_GAUSSIAN,size,1,sigma); convolution(src,dst,sigma,dst1,dst2); cvNamedWindow("src",CV_WINDOW_AUTOSIZE); cvNamedWindow("dst",CV_WINDOW_AUTOSIZE); cvShowImage("src",src); cvShowImage("dst",dst); cvNamedWindow("pic_smooth_sigma",CV_WINDOW_AUTOSIZE); cvShowImage("pic_smooth_sigma",pic_smooth_sigma); cvWaitKey(0); cvDestroyWindow("src"); cvReleaseImage(&src); cvDestroyWindow("pic_smooth_sigma"); cvReleaseImage(&pic_smooth_sigma); cvDestroyWindow("dst"); cvReleaseImage(&dst);}
#include
回覆刪除#include
#include
#include
using namespace std;
void convolution(IplImage *src,IplImage *dst,int sigma,IplImage *dst1,IplImage *dst2)
{
double temp=0.0;
double value=0.0;
CvScalar point_dst_all,point_dst_com,A,B;
point_dst_com=cvScalar(0,0,0);
point_dst_all=cvScalar(0,0,0);
int size=(6*sigma)+1;
int half=((6*sigma)/2);
double *arr = new double[size];
for(int x=-half;x<=half;x++)
{
temp =-(((double)x*(double)x)/((double)2*(double)sigma*(double)sigma));
value=(-((double)x/((double)sigma*(double)sigma))*(exp(temp)));
*(arr+(x+half))=value;
}
for(int i=0;iheight;h++)
{
for(int w=half;wwidth-size;w++)
{
point_dst_com=cvScalar(0,0,0);
point_dst_all=cvScalar(0,0,0);
for(int i=0;iheight-size;h++)
{
for(int w=0;wwidth-size;w++)
{
point_dst_com=cvScalar(0,0,0);
point_dst_all=cvScalar(0,0,0);
for(int i=0;iheight;h++)
{
for(int w=0;wwidth;w++)
{
A=cvGet2D(dst1,h,w);
B=cvGet2D(dst2,h,w);
A.val[0]=A.val[0]+B.val[0];
cvSet2D(dst,h,w,A);
}
}
delete [] arr;
}
int main()
{
int sigma;
cout<<"請輸入標準差:"<>sigma;
int size=(6*sigma)+1;
IplImage *src, *pic_smooth_sigma;
src=cvLoadImage("D:\\img\\Motocycle.bmp",0);
pic_smooth_sigma=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);//IPL_DEPTH_64F
IplImage *dst =cvCreateImage( cvSize(src->width,src->height),IPL_DEPTH_8U,1);
IplImage *dst1 =cvCreateImage( cvSize(src->width,src->height),IPL_DEPTH_8U,1);
IplImage *dst2 =cvCreateImage( cvSize(src->width,src->height),IPL_DEPTH_8U,1);
CvScalar point_dst_all,point_dst_com;
//cvCvtColor(src,dst,CV_BGR2GRAY);
cvSmooth(src,pic_smooth_sigma,CV_GAUSSIAN,size,1,sigma);
convolution(src,dst,sigma,dst1,dst2);
cvNamedWindow("src",CV_WINDOW_AUTOSIZE);
cvNamedWindow("dst",CV_WINDOW_AUTOSIZE);
cvShowImage("src",src);
cvShowImage("dst",dst);
cvNamedWindow("pic_smooth_sigma",CV_WINDOW_AUTOSIZE);
cvShowImage("pic_smooth_sigma",pic_smooth_sigma);
cvWaitKey(0);
cvDestroyWindow("src");
cvReleaseImage(&src);
cvDestroyWindow("pic_smooth_sigma");
cvReleaseImage(&pic_smooth_sigma);
cvDestroyWindow("dst");
cvReleaseImage(&dst);
}