为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨魅力 2023-04-25 19:15:06
#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;}
查看完整描述

1 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

cvLoadImage("depth.png",1);参数是1载入的是彩色图片。

查看完整回答
反对 回复 2023-04-27
  • 1 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信