关于使用cvSobel 和 cvCanny 内存问题
2012-01-17 16:17
387 查看
(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);
相关文章推荐
- 【原创】回答网友关于ARM9 S3C2440 wince6.0 内存 128M的使用问题
- 关于QT下资源使用和资源占用内存过多的问题
- 关于sqlite3使用操作中内存耗尽导致进程被kill的问题
- 关于 free 命令显示内存使用情况问题
- 关于内存问题和使用内存建议
- MAC OS 关于内存使用状态的问题
- 关于 Eclipse 使用Tomcat 启动项目时的内存溢出问题
- java中使用堆外内存,关于内存回收需要注意的事和没有解决的遗留问题(等大神解答)
- 关于mfc 中使用gflags检测内存越界的问题
- 关于Java Logger类的使用问题 - 内存不释放
- 关于WD IFbA(Interactive Form by Adobe)的内存使用量问题
- 关于block的回调使用-防止内存泄露问题
- 关于block的回调使用-防止内存泄露问题
- 使用驱动直写内存时,关于类型需要注意的问题!
- sprintf的使用和关于内存分配问题
- 关于xp使用4G内存的问题
- iOS关于使用七牛SDK上传多张图片内存不断增加问题的解决方案
- 关于android中使用new Message的内存泄露问题
- 关于SQL SERVER的内存使用的问题
- 关于 MFC 绘制 JPG图像 问题 -- 无敌使用fread 获取图像到内存中