gpt4 book ai didi

C++ 控件到达非空结束

转载 作者:行者123 更新时间:2023-11-28 03:05:01 26 4
gpt4 key购买 nike

我正在尝试编译它,但它给了我那个恼人的错误。

Image imageLabeling(const Image &img, ImageLabels &imgL)
{

long numLines=img.size();
long numCols=img[0].size();

int u=0;
int v=0;
int label=1;

imgL.resize(numLines);
for (unsigned int i=0; i<numLines; i++)
imgL[i].resize(numCols);

for (unsigned int i=0; i <numLines; i++)
for (unsigned int j=0; j <numCols; j++)
imgL[i][j]=0;


for (int i=0; i<numLines; i++)
for (int j=0; j<numCols; j++)
{
if(img[i][j]=='1'&&imgL[i][j]==0)
{
floodFill (u,v,label,img,imgL);
label++;
}
}}

有什么想法吗?

P.s 这是我的洞码

#include <iostream>
#include <iomanip>
#include <vector>
#include <fstream> //NOTE: needed to use files
#include <string>
using namespace std;

// Create a new type and call it 'Image'
typedef vector<vector<char>> Image;
typedef vector<vector<int>> ImageLabels;
//============================================================
// Reads an image from input stream 'f'
// 'f' can be a previously open text file or 'cin'
// and stores it into 'img'
//------------------------------------------------------------



void readImage(istream &f, Image &img)
{
unsigned int numLines, numCols;

cout << "Number of lines ?"<<endl;
f>>numLines;
f>>numCols;
cout << "Number of columns ?"<<numCols<<endl;


img.resize(numLines);
for (unsigned int i=0; i<numLines; i++)
img[i].resize(numCols);

for (unsigned int i=0; i <numLines; i++)
for (unsigned int j=0; j <numCols; j++)
f >> img[i][j];
}

void readCompFile (istream &f, Image &img) //
{
int row=0;
int cols=0;
char value ='0';
f>>row;
f>>cols;
f>>value;
int numPixels=0;
vector<char> tmp;
while(f>>numPixels)
{
for(int i=0;i<numPixels;i++)
{
tmp.push_back(value); // insere continuamente no vector tmp os valores do formato comprimido
}
if (value=='0')
value='1';
else
value='0';
}

for(int i = 0;i<row;i++)
{
vector<char> accumulator;
for(int j=0;j<cols;j++)
{
accumulator.push_back(tmp[i*row+j]); // retira os valores bin·rios da imagem, criada no vector tmp, para o vector accumulator, em linha e coluna.
}
img.push_back(accumulator); // retira os valores do vector acumulator, para a imagem final apresentada na consola.
}
}

void showImage(ostream &f, const Image &img)
{
for (unsigned int i=0; i <img.size(); i++)
{
for (unsigned int j=0; j <img[i].size(); j++)
f << setw(3) << img[i][j];
f << endl;
}
}

void floodFill (int u, int v, int label,Image img, ImageLabels &imgL)

{
struct Point { int x; int y;} p;


u = p.x;
v = p.y;

vector <Point> stack;
stack.push_back(p);


while (!stack.empty())
{
stack.back ();
stack.pop_back();

u = p.x;
v = p.y;
//u=u+1;

Point one = {(u+1), v};
Point two = {u,(v+1)};
Point three = {u,(v-1)};
Point four = {(u-1),v};

if ((u>=0) && (u<img.size()) && (v>=0) && (v<img[0].size()) && img[u][v]==1)
{
stack.push_back(one);
stack.push_back(two);
stack.push_back(three);
stack.push_back(four);
}
}
}

void readImageLabeling(istream &f, Image &img)
{
unsigned int numLines, numCols;

f>>numLines;
f>>numCols;


img.resize(numLines);
for (unsigned int i=0; i<numLines; i++)
img[i].resize(numCols);

for (unsigned int i=0; i <numLines; i++)
for (unsigned int j=0; j <numCols; j++)
f >> img[i][j];
}


//============================================================
// Writes an image 'img' to output stream 'f'
// 'f' can be a previously open text file or 'cout'
//------------------------------------------------------------


Image imageLabeling(const Image &img, ImageLabels &imgL)
{

long numLines=img.size();
long numCols=img[0].size();

int u=0;
int v=0;
int label=1;

imgL.resize(numLines);
for (unsigned int i=0; i<numLines; i++)
imgL[i].resize(numCols);

for (unsigned int i=0; i <numLines; i++)
for (unsigned int j=0; j <numCols; j++)
imgL[i][j]=0;


for (int i=0; i<numLines; i++)
for (int j=0; j<numCols; j++)
{
if(img[i][j]=='1'&&imgL[i][j]==0)
{
floodFill (u,v,label,img,imgL);
label++;
}
}}




Image chooseFormat(bool answer)
{
Image imgOrg,imgComp;
ifstream inputImg,inputImgComp;

inputImg.open("img1.txt");
ofstream outputImg("img2.txt");

inputImgComp.open("img_comp1.txt");
ofstream outputImgComp("img_comp2.txt");
if (answer == true)
{readImage(inputImg,imgOrg);
showImage(cout,imgOrg);
showImage(outputImg,imgOrg);
return imgOrg;
}
else
{
readCompFile (inputImgComp, imgComp);
showImage(cout,imgComp);
showImage(outputImgComp,imgComp);
return imgComp;
}

}

int main()
{
Image imgResult;
ImageLabels imgLabel;

bool answerFormat = false;
string answer;
cout<<"Read normal format?"<<endl;
cin >> answer;
if(answer=="yes")
answerFormat=true;
else
answerFormat=false;

imgResult=chooseFormat(answerFormat); //usa a funÁ„o answerFormat para escolher o tipo de ficheiro que se quer interpretar - imgResult
imageLabeling(imgResult,imgLabel); // faz o labeling da imagem escolhida (normal/comprimida - imgResult)
cout<<endl;
showImage(cout,imgResult); // Mostra a imgResult j· etiquetada



return 0;
};

最佳答案

在这一行中:

Image imageLabeling(const Image &img, ImageLabels &imgL)
^^^^^

您是在告诉编译器您的函数“imageLabeling”应该返回“Image”类型的内容。然后您继续在该函数中实际上不返回任何内容。

你应该把这行改成:

void imageLabeling(const Image &img, ImageLabels &imgL)
^^^^

或者返回您 promise 的“图片”。

关于C++ 控件到达非空结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19938842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com