在尝试处理大量图像时,我遇到了一个问题。如果这个数字很低,我可以运行算法,但当我运行大量图像时,它就不起作用了。
所以,我有12张图片,我需要从这些图片中再生成288张。我可以从第一个图像生成第一组288个图像,并从第二个图像生成第二组图像。但在那之后,程序停止了,然后我得到了以下错误:
"mm_areaopen: lib失败“
以下是算法停止的代码:
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。
对不起,我的英语不好。
发布于 2014-07-25 23:06:06
你可以像下面这样包装你的遗留类库。请注意,您创建了一个IplImage,然后为需要IplImage*的函数传递该you的地址。
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;
}https://stackoverflow.com/questions/24946649
复制相似问题