猿问

我现在的代码如下,但是运行后sum值是超出范围的~模板的调用应该是没有问题的~

#include "stdafx.h"
#include "opencv2/opencv.hpp"

int main( int argc, char** argv )
{
//变量声明
IplImage* depth; 
int width,height;
int x,y;

//函数声明
/*double int2double(int n);
int double2int(double n);*/

//载入深度图
depth=cvLoadImage("depth.png",1);
cvNamedWindow("depthImage",1);
cvShowImage("depthImage",depth);

//获取图片的宽高
width=depth->width;
height=depth->height;

//将载入的图片转换为灰度图
IplImage* gdepth=cvCreateImage(cvGetSize(depth),IPL_DEPTH_8U,1);
cvCvtColor(depth,gdepth,CV_RGB2GRAY); //??为什么深度图已经是灰度图像了还有转换为灰度图才可以呢?? 

//对深度图进行sobel边缘检测 
IplImage* sobel=cvCloneImage(gdepth); 
/*double temp_d,temp1_d,sum_d;*/
int temp,temp1,sum;

uchar* data=(uchar*)(sobel->imageData );//data为一个指针
int ptr[8]={0,0,0,0,0,0,0,0}; 

for(y=1;y<height-1;y++)
{
for(x=1;x<width-1;x++)

ptr[0]=*(data+(y-1)*sobel->widthStep+(x-1));
ptr[1]=*(data+(y-1)*sobel->widthStep+x);
ptr[2]=*(data+(y-1)*sobel->widthStep+(x+1));
ptr[3]=*(data+y*sobel->widthStep+(x-1));
ptr[4]=*(data+y*sobel->widthStep+(x+1));
ptr[5]=*(data+(y+1)*sobel->widthStep+(x-1)); 
ptr[6]=*(data+(y+1)*sobel->widthStep+x);
ptr[7]=*(data+(y+1)*sobel->widthStep+(x+1));

temp=abs(ptr[5]+2*ptr[6]+ptr[7]-ptr[0]-2*ptr[1]-ptr[2]);
temp1=abs(ptr[2]+2*ptr[4]+ptr[7]-ptr[0]-2*ptr[3]-ptr[5]); 
sum=temp>temp1?temp:temp1; 
if(sum>=255){
sum=255;
}else{
sum=0;
}

/*printf("%d ",sum);*/

*(data+y*sobel->widthStep+x)=sum; 




cvNamedWindow("sobel_depth",1);
cvShowImage("sobel_depth",sobel);

cvWaitKey(0);

//销毁窗口并释放内存空间

cvDestroyWindow("sobel_depth");
cvReleaseImage(&sobel);

return 0;
}

杨魅力
浏览 227回答 1
1回答

慕娘9325324

cvLoadImage("depth.png",1);参数是1载入的是彩色图片。
随时随地看视频慕课网APP
我要回答