首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成和使用多个镜像失败

生成和使用多个镜像失败
EN

Stack Overflow用户
提问于 2014-07-25 09:31:26
回答 1查看 44关注 0票数 1

在尝试处理大量图像时,我遇到了一个问题。如果这个数字很低,我可以运行算法,但当我运行大量图像时,它就不起作用了。

所以,我有12张图片,我需要从这些图片中再生成288张。我可以从第一个图像生成第一组288个图像,并从第二个图像生成第二组图像。但在那之后,程序停止了,然后我得到了以下错误:

"mm_areaopen: lib失败“

以下是算法停止的代码:

代码语言:javascript
复制
for (int n = 0; n < 3; n++){

    // tecido Normal -------------------------------------------------------------------------------------|

    str_normal.str("");
    title_normal.clear();
    str_normal << "normal-" << n + 1 << ".tif";
    title_normal = str_normal.str();
    normal = title_normal.c_str();

    original_normal = cvLoadImage(normal, CV_LOAD_IMAGE_GRAYSCALE);

    image_names[i] = normal;

    str_normal.str("");
    title_normal.clear();
    str_normal << "normal-" << n + 1 << "-selection" << ".tif";
    title_normal = str_normal.str();
    normal = title_normal.c_str();

    goldStandard_normal = imread(normal, IMREAD_UNCHANGED);

    // tecido NIC-1 -------------------------------------------------------------------------------------|

    str_nic1.str("");
    title_nic1.clear();
    str_nic1 << "nic1-" << n + 1 << ".tif";
    title_nic1 = str_nic1.str();
    nic1 = title_nic1.c_str();

    original_nic1 = cvLoadImage(nic1, CV_LOAD_IMAGE_GRAYSCALE);

    image_names[i] = nic1;

    str_nic1.str("");
    title_nic1.clear();
    str_nic1 << "nic1-" << n + 1 << "-selection" << ".tif";
    title_nic1 = str_nic1.str();
    nic1 = title_nic1.c_str();

    goldStandard_nic1 = imread(nic1, IMREAD_UNCHANGED);

    // tecido NIC-2 -------------------------------------------------------------------------------------|

    str_nic2.str("");
    title_nic2.clear();
    str_nic2 << "nic2-" << n + 1 << ".tif";
    title_nic2 = str_nic2.str();
    nic2 = title_nic2.c_str();

    original_nic2 = cvLoadImage(nic2, CV_LOAD_IMAGE_GRAYSCALE);

    image_names[i] = nic2;

    str_nic2.str("");
    title_nic2.clear();
    str_nic2 << "nic2-" << n + 1 << "-selection" << ".tif";
    title_nic2 = str_nic2.str();
    nic2 = title_nic2.c_str();

    goldStandard_nic2 = imread(nic2, IMREAD_UNCHANGED);

    // tecido NIC-3 -------------------------------------------------------------------------------------|

    str_nic3.str("");
    title_nic3.clear();
    str_nic3 << "nic3-" << n + 1 << ".tif";
    title_nic3 = str_nic3.str();
    nic3 = title_nic3.c_str();

    original_nic3 = cvLoadImage(nic3, CV_LOAD_IMAGE_GRAYSCALE);

    image_names[i] = nic3;

    str_nic3.str("");
    title_nic3.clear();
    str_nic3 << "nic3-" << n + 1 << "-selection" << ".tif";
    title_nic3 = str_nic3.str();
    nic3 = title_nic3.c_str();

    goldStandard_nic3 = imread(nic3, IMREAD_UNCHANGED);

    for (i = 0; i < 12; i++){

        j = 0;

        // tecido Normal -------------------------------------------------------------------------------------|

        if (i >= 0 && i < 3){

            for (p1 = 18; p1 <= 23; p1++){
                for (p2 = 1; p2 <= 3; p2++){
                    for (p3 = 1; p3 <= 4; p3++){
                        for (p4 = 100; p4 <= 175; p4 = p4 + 25){

                            parameterSet[j].p1 = p1;
                            parameterSet[j].p2 = p2;
                            parameterSet[j].p3 = p3;
                            parameterSet[j].p4 = p4;

                            parameterSet[j].media = 0;

                            j++;

                            watershedImage_normal = Morphology::doPipeline(original_normal, p1, p2, p3, p4);
                            img_normal = watershedImage_normal;

                            cv::floodFill(img_normal, cvPoint(50, 50), cvScalar(255, 255, 255));
                            bitwise_not(img_normal, img_normal);

                            str_normal.str("");
                            title_normal.clear();
                            str_normal << "normal-" << n + 1 << "-" << p1 << "-" << p2 << "-" << p3 << "-" << p4 << ".tif";
                            title_normal = str_normal.str();

                            imwrite(title_normal, img_normal);

                            input_normal = imread(title_normal, IMREAD_UNCHANGED);

                            parameterSet[j].overlap[i] = caib::areaOverlap(goldStandard_normal, input_normal);

                        }
                    }
                }
            }
        }

        // tecido NIC-1 -------------------------------------------------------------------------------------|

        if (i >= 3 && i < 6){

            for (p1 = 18; p1 <= 23; p1++){
                for (p2 = 1; p2 <= 3; p2++){
                    for (p3 = 1; p3 <= 4; p3++){
                        for (p4 = 100; p4 <= 175; p4 = p4 + 25){

                            watershedImage_nic1 = Morphology::doPipeline(original_nic1, p1, p2, p3, p4);
                            img_nic1 = watershedImage_nic1;

                            cv::floodFill(img_nic1, cvPoint(50, 50), cvScalar(255, 255, 255));
                            bitwise_not(img_nic1, img_nic1);

                            str_nic1.str("");
                            title_nic1.clear();
                            str_nic1 << "nic1-" << n + 1 << "-" << p1 << "-" << p2 << "-" << p3 << "-" << p4 << ".tif";
                            title_nic1 = str_nic1.str();

                            imwrite(title_nic1, img_nic1);

                            input_nic1 = imread(title_nic1, IMREAD_UNCHANGED);

                            parameterSet[j].overlap[i] = caib::areaOverlap(goldStandard_nic1, input_nic1);

                        }
                    }
                }
            }

        }

        // tecido NIC-2 -------------------------------------------------------------------------------------|

        if (i >= 6 && i < 9){

            for (p1 = 18; p1 <= 23; p1++){
                for (p2 = 1; p2 <= 3; p2++){
                    for (p3 = 1; p3 <= 4; p3++){
                        for (p4 = 100; p4 <= 175; p4 = p4 + 25){

                            watershedImage_nic2 = Morphology::doPipeline(original_nic2, p1, p2, p3, p4);
                            img_nic2 = watershedImage_nic2;

                            cv::floodFill(img_nic2, cvPoint(50, 50), cvScalar(255, 255, 255));
                            bitwise_not(img_nic2, img_nic2);

                            str_nic2.str("");
                            title_nic2.clear();
                            str_nic2 << "nic2-" << n + 1 << "-" << p1 << "-" << p2 << "-" << p3 << "-" << p4 << ".tif";
                            title_nic2 = str_nic2.str();

                            imwrite(title_nic2, img_nic2);

                            input_nic2 = imread(title_nic2, IMREAD_UNCHANGED);

                            parameterSet[j].overlap[i] = caib::areaOverlap(goldStandard_nic2, input_nic2);

                        }
                    }
                }
            }
        }

        // tecido NIC-3 -------------------------------------------------------------------------------------|

        if (i >= 9 && i < 12){

            for (p1 = 18; p1 <= 23; p1++){
                for (p2 = 1; p2 <= 3; p2++){
                    for (p3 = 1; p3 <= 4; p3++){
                        for (p4 = 100; p4 <= 175; p4 = p4 + 25){

                            watershedImage_nic3 = Morphology::doPipeline(original_nic3, p1, p2, p3, p4);
                            img_nic3 = watershedImage_nic3;

                            cv::floodFill(img_nic3, cvPoint(80, 80), cvScalar(255, 255, 255));
                            bitwise_not(img_nic3, img_nic3);

                            str_nic3.str("");
                            title_nic3.clear();
                            str_nic3 << "nic3-" << n + 1 << "-" << p1 << "-" << p2 << "-" << p3 << "-" << p4 << ".tif";
                            title_nic3 = str_nic3.str();

                            imwrite(title_nic3, img_nic3);

                            input_nic3 = imread(title_nic3, IMREAD_UNCHANGED);

                            parameterSet[j].overlap[i] = caib::areaOverlap(goldStandard_nic3, input_nic3);

                        }
                    }
                }
            }
        }
    }

打开所有"nic1-1.tif“图像后,出现错误。有人知道为什么会这样吗?

顺便说一下,Morphology::doPipeline方法利用了SDC Morphology Toolbox for C++ 1.6。

对不起,我的英语不好。

EN

回答 1

Stack Overflow用户

发布于 2014-07-25 23:06:06

你可以像下面这样包装你的遗留类库。请注意,您创建了一个IplImage,然后为需要IplImage*的函数传递该you的地址。

代码语言:javascript
复制
 cv::Mat myPipeline(cv::Mat original_nic, int p1, int p2, int p3, int p4)
 { 
     IplImage original_iplimage = IplImage(original_nic);
     IplImage* watershedImage = Morphology::doPipeline( & original_iplimage , p1, p2, p3, p4);
     cv::Mat result(watershedImage, true);
     cvReleaseImage(watershedImage);
     return result;
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24946649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档