robert 边缘检测

#include "cv.h"
#include "highgui.h"
#include <math.h>
#include "stdio.h"


#pragma comment(lib, "cv.lib")  
#pragma comment(lib, "cxcore.lib")  
#pragma comment(lib, "highgui.lib")  


void robert(IplImage *src,IplImage *robert)
{
int x,y,i,w,h;
int temp,temp1;
uchar* ptr;


int ptr1[4]={0};
int indexx[4]={0,1,1,0};
int indexy[4]={0,0,1,1};


//IplImage *robert;






//gray=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
   // cvCvtColor(src,gray,CV_RGB2GRAY);
    




/*-------------Roberts算子-------------------*/
robert=cvCloneImage(src);
//robert=cvCreateImage(cvGetSize(src),src->widthStep,1);




ptr=(uchar*)robert->imageData;


    w=robert->width;
h=robert->height;
printf("%d %d",w,h);
for(y=0;y<h-1;y++)
for(x=0;x<w-1;x++)
{


for(i=0;i<4;i++)
{
ptr1[i]= *(ptr+(y+indexy[i])*robert->widthStep+x+indexx[i]);

}
temp=abs(ptr1[0]-ptr1[2]);
temp1=abs(ptr1[1]-ptr1[3]);
temp=(temp>temp1?temp:temp1);
    //temp=(int) sqrt(temp*temp+temp1*temp1);
temp=(int) sqrt(temp*temp+temp1*temp1);
if (temp>25)
temp=255;
else temp=0;  
*(ptr+y*robert->widthStep+x)=temp; 



}

cvNamedWindow("robert",1);
cvShowImage("robert",robert);
cvWaitKey(0);
cvReleaseImage(&src);
cvReleaseImage(&robert);

}


void main()
{
IplImage *src,*dst;
src=cvLoadImage("11.jpg",0);
dst=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
cvNamedWindow("src",1);
cvShowImage("src",src);
cvSmooth(src,src,CV_GAUSSIAN,3,3,0,0);
cvSmooth(src,src,CV_MEDIAN,3,3,0,0);
cvErode(src,src,NULL,1);
cvDilate(src,src,NULL,1);
cvThreshold(src,src,100,255,CV_THRESH_BINARY_INV);
//cvAdaptiveThreshold(src,src,34,CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY,3,5);
//cvSmooth(src,src,CV_GAUSSIAN,3,3,0,0);
robert(src,dst);

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值