关于使用cvSobel 和 cvCanny 内存问题

(1)关于cvSobel
	IplImage *dstimg=cvCreateImage(isize,IPL_DEPTH_8U,1);
	cvSobel(srcgray,dstimg,0,1,7);

cvSobel出错,精细看看未曾问题啊。其实,这里是问题的,因为以Sobel措施求完导数后会有负值,还有会大于255的值而你建的Sobel的图像是 IPL_DEPTH_8U,也即便8位无符号数,因而Sobel发生的图像位数不够,要16位有符号的,也即便 IPL_DEPTH_16S。cvSobel函数最后的参数选择也很重要

 

(2)关于cvCanny
	IplImage *dstimg=cvCreateImage(isize,IPL_DEPTH_8U,1);
	cvCanny(srcgray,dstimg,30,100,3);
 

cvCanny出错,发现是这样的,源图像srcgray是由jpg(完全rgb色)转换得到的的灰度图cvCanny就会出问题,而如果是由bmp转换得到的的灰度图cvCanny就能得到正确结果。问题还没解决。。。。。如何解决??

……

上面的问题都解决了,jpg和bmp都可以解决,是编码不够小心,前面一些加载参数设置不正确,下面附可执行正确代码的函数主体

	wchar_t _curPath[MAX_PATH];
	GetCurrentDirectory(MAX_PATH,_curPath);
	int len=wcslen(_curPath);
	char *curPath=new char[MAX_PATH];
	curPath[len]='\0';
	WideCharToMultiByte(CP_ACP,0,_curPath,len,curPath,len,0,0);
	strcat(curPath,"\\images\\1.jpg");

	//
	cvNamedWindow("srcimg",1);
	cvNamedWindow("srcgray",1);
	cvNamedWindow("sobel dstimg",1);

	//
	IplImage *srcimg=cvLoadImage(curPath,1);


	CvSize isize=cvGetSize(srcimg);

	IplImage *srcgray=cvCreateImage(isize,IPL_DEPTH_8U,1);

	cvCvtColor(srcimg,srcgray,CV_RGB2GRAY);

	IplImage *dstimg=cvCreateImage(isize,IPL_DEPTH_8U,1);

	//执行canny变换
	cvCanny(srcgray,dstimg,50,150,3);

	char *dstdata=dstimg->imageData;
	cout<<strlen(dstimg->imageData)<<endl;

	//
	cvShowImage("srcimg",srcimg);
	cvShowImage("srcgray",srcgray);
	cvShowImage("sobel dstimg",dstimg);
	cvWaitKey(0);


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值