C++和opencv函数体,我想让他返回最后一个IplImage结构体,初学求指教

SrCMpunk 2014-03-12 09:43:25
void CMyDialog::Threshold(IplImage *img, IplImage *img0)
{
img=cvCreateImage(cvSize(400,300),8,1);
IplImage* pyr=cvCreateImage(cvSize(img->width/2,img->height/2),IPL_DEPTH_8U,1);
cvResize(img0,img);

cvSmooth(img,img,CV_MEDIAN);




IplImage* imgS=cvCreateImage(cvGetSize(img),IPL_DEPTH_16S,1);
IplImage* imgTh=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
IplImage* temp=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);


cvSobel(img,imgS,2,0,3);
cvNormalize(imgS,imgTh,255,0,CV_MINMAX);

cvThreshold( imgTh, imgTh, 100, 255, CV_THRESH_BINARY );

for (int k=0; k<img->height; k++)

for(int j=0; j<img->width; j++)

{

imgTh->imageData[k*img->widthStep+j] = 255 - imgTh->imageData[k*img->widthStep+j];

}




}

IplImage *img和IplImage *img0 是相同的图片,
输入的都是pImgCanny=cvCreateImage(cvSize(src->width,src->height),IPL_DEPTH_8U,1); src为原始图片


我想最后返回的是*imgTh这个图片,但是一直返回的是*img
这是从C移植过来的算法,算法正确,在C++上调试不出来,求指教
...全文
144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-03-13
  • 打赏
  • 举报
回复
IplImage *CMyDialog::Threshold(IplImage *img, IplImage *img0)
{
    img=cvCreateImage(cvSize(400,300),8,1);
    IplImage* pyr=cvCreateImage(cvSize(img->width/2,img->height/2),IPL_DEPTH_8U,1);
    cvResize(img0,img);

    cvSmooth(img,img,CV_MEDIAN);

    IplImage* imgS=cvCreateImage(cvGetSize(img),IPL_DEPTH_16S,1);
    static IplImage* imgTh=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
    IplImage* temp=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

    cvSobel(img,imgS,2,0,3);
    cvNormalize(imgS,imgTh,255,0,CV_MINMAX);

    cvThreshold( imgTh, imgTh, 100, 255, CV_THRESH_BINARY );

    for (int k=0; k<img->height; k++)

        for(int j=0; j<img->width; j++)
        {

            imgTh->imageData[k*img->widthStep+j] = 255 - imgTh->imageData[k*img->widthStep+j];

        }
    return imgTh;
}

SrCMpunk 2014-03-13
  • 打赏
  • 举报
回复
引用 1 楼 quarryman 的回复:
这代码有很多问题啊 该释放的没释放,不该创建的确却创建。
运行没问题,就是想把传入的实参最后边成*imgTh保留下来,而不是传入后实参没有变化。
SrCMpunk 2014-03-13
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
建议先编译链接调试OpenCV自带的相关例子代码。
代码是正确的,就是返回值不是*imgTh这个我想要调用后返回*imgTh这个值。
赵4老师 2014-03-13
  • 打赏
  • 举报
回复
建议先编译链接调试OpenCV自带的相关例子代码。
SrCMpunk 2014-03-13
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
IplImage *CMyDialog::Threshold(IplImage *img, IplImage *img0)
{
    img=cvCreateImage(cvSize(400,300),8,1);
    IplImage* pyr=cvCreateImage(cvSize(img->width/2,img->height/2),IPL_DEPTH_8U,1);
    cvResize(img0,img);

    cvSmooth(img,img,CV_MEDIAN);

    IplImage* imgS=cvCreateImage(cvGetSize(img),IPL_DEPTH_16S,1);
    static IplImage* imgTh=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
    IplImage* temp=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

    cvSobel(img,imgS,2,0,3);
    cvNormalize(imgS,imgTh,255,0,CV_MINMAX);

    cvThreshold( imgTh, imgTh, 100, 255, CV_THRESH_BINARY );

    for (int k=0; k<img->height; k++)

        for(int j=0; j<img->width; j++)
        {

            imgTh->imageData[k*img->widthStep+j] = 255 - imgTh->imageData[k*img->widthStep+j];

        }
    return imgTh;
}

在public里面怎么声明这个方法用struct吗? Threshold(IplImage *img,IplImage *img0);
采石工 2014-03-12
  • 打赏
  • 举报
回复
这代码有很多问题啊 该释放的没释放,不该创建的确却创建。

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧