C++ OpenCV:无法将数据正确传递给函数
使用MSVS2010在Windows上编译C++ OpenCV:无法将数据正确传递给函数,c++,opencv,C++,Opencv,使用MSVS2010在Windows上编译 int foo(unsigned short int *values, unsigned int nSamples) { cout<<"address in PlotMeNow"<<endl; cout<<&values[0]<<endl; cout<<"values in PlotMeNow"<<endl; for(int i=0;i
int foo(unsigned short int *values, unsigned int nSamples)
{
cout<<"address in PlotMeNow"<<endl;
cout<<&values[0]<<endl;
cout<<"values in PlotMeNow"<<endl;
for(int i=0;i<5;i++){
cout<<values[i]<<endl;
}
return 0;
}
unsigned short int * IterateLine(Mat image)
{
LineIterator it(image, Point(1,1), Point(5,5), 8);
vector<ushort> buf;
for(int i = 0; i < it.count; i++, it++){
buf.push_back(image.at<ushort>(it.pos()));
}
std::vector<ushort> data(5);
data=buf;
cout<<"the address in the iterateLine() is"<<endl;
cout<<&data[0]<<endl;
cout<<"values in IterateLine"<<endl;
for(int i=0;i<5;i++){
cout<<data[i]<<endl;
}
return &data[0];
}
int main()
{
Mat img = imread("sir.png", CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH);
unsigned short int * x ;
//Iterate through the line
x = IterateLine(img);
int n=5;
foo(&x[0], n);
cout<<"The address in main() is"<<endl;
cout<<x<<endl;
cout<<"values in main are"<<endl;
for(int i=0;i<5;i++){
cout<<x[i]<<endl;
}
getch();
return 0 ;
}
在下面的代码中,我尝试使用行迭代器,然后在沿行提取像素值后,我尝试将提取的数据传递给函数foo()
:
int foo(unsigned short int *values, unsigned int nSamples)
{
cout<<"address in PlotMeNow"<<endl;
cout<<&values[0]<<endl;
cout<<"values in PlotMeNow"<<endl;
for(int i=0;i<5;i++){
cout<<values[i]<<endl;
}
return 0;
}
unsigned short int * IterateLine(Mat image)
{
LineIterator it(image, Point(1,1), Point(5,5), 8);
vector<ushort> buf;
for(int i = 0; i < it.count; i++, it++){
buf.push_back(image.at<ushort>(it.pos()));
}
std::vector<ushort> data(5);
data=buf;
cout<<"the address in the iterateLine() is"<<endl;
cout<<&data[0]<<endl;
cout<<"values in IterateLine"<<endl;
for(int i=0;i<5;i++){
cout<<data[i]<<endl;
}
return &data[0];
}
int main()
{
Mat img = imread("sir.png", CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH);
unsigned short int * x ;
//Iterate through the line
x = IterateLine(img);
int n=5;
foo(&x[0], n);
cout<<"The address in main() is"<<endl;
cout<<x<<endl;
cout<<"values in main are"<<endl;
for(int i=0;i<5;i++){
cout<<x[i]<<endl;
}
getch();
return 0 ;
}
图像为单通道16位png
int foo(unsigned short int *values, unsigned int nSamples)
{
cout<<"address in PlotMeNow"<<endl;
cout<<&values[0]<<endl;
cout<<"values in PlotMeNow"<<endl;
for(int i=0;i<5;i++){
cout<<values[i]<<endl;
}
return 0;
}
unsigned short int * IterateLine(Mat image)
{
LineIterator it(image, Point(1,1), Point(5,5), 8);
vector<ushort> buf;
for(int i = 0; i < it.count; i++, it++){
buf.push_back(image.at<ushort>(it.pos()));
}
std::vector<ushort> data(5);
data=buf;
cout<<"the address in the iterateLine() is"<<endl;
cout<<&data[0]<<endl;
cout<<"values in IterateLine"<<endl;
for(int i=0;i<5;i++){
cout<<data[i]<<endl;
}
return &data[0];
}
int main()
{
Mat img = imread("sir.png", CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH);
unsigned short int * x ;
//Iterate through the line
x = IterateLine(img);
int n=5;
foo(&x[0], n);
cout<<"The address in main() is"<<endl;
cout<<x<<endl;
cout<<"values in main are"<<endl;
for(int i=0;i<5;i++){
cout<<x[i]<<endl;
}
getch();
return 0 ;
}
可以看出,值foo()
和main()
是错误的。它应该与IterateLine()
报告的相同。由于地址的传递是正确的(见输出),所以使用指针,我应该从任何函数中获得相同的数据。但这并没有发生
int foo(unsigned short int *values, unsigned int nSamples)
{
cout<<"address in PlotMeNow"<<endl;
cout<<&values[0]<<endl;
cout<<"values in PlotMeNow"<<endl;
for(int i=0;i<5;i++){
cout<<values[i]<<endl;
}
return 0;
}
unsigned short int * IterateLine(Mat image)
{
LineIterator it(image, Point(1,1), Point(5,5), 8);
vector<ushort> buf;
for(int i = 0; i < it.count; i++, it++){
buf.push_back(image.at<ushort>(it.pos()));
}
std::vector<ushort> data(5);
data=buf;
cout<<"the address in the iterateLine() is"<<endl;
cout<<&data[0]<<endl;
cout<<"values in IterateLine"<<endl;
for(int i=0;i<5;i++){
cout<<data[i]<<endl;
}
return &data[0];
}
int main()
{
Mat img = imread("sir.png", CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH);
unsigned short int * x ;
//Iterate through the line
x = IterateLine(img);
int n=5;
foo(&x[0], n);
cout<<"The address in main() is"<<endl;
cout<<x<<endl;
cout<<"values in main are"<<endl;
for(int i=0;i<5;i++){
cout<<x[i]<<endl;
}
getch();
return 0 ;
}
为什么会发生这种情况?如何正确地将数据传递到foo()
void IterateLine(常数矩阵和图像、向量和线像素、点p1、点p2)
int foo(unsigned short int *values, unsigned int nSamples)
{
cout<<"address in PlotMeNow"<<endl;
cout<<&values[0]<<endl;
cout<<"values in PlotMeNow"<<endl;
for(int i=0;i<5;i++){
cout<<values[i]<<endl;
}
return 0;
}
unsigned short int * IterateLine(Mat image)
{
LineIterator it(image, Point(1,1), Point(5,5), 8);
vector<ushort> buf;
for(int i = 0; i < it.count; i++, it++){
buf.push_back(image.at<ushort>(it.pos()));
}
std::vector<ushort> data(5);
data=buf;
cout<<"the address in the iterateLine() is"<<endl;
cout<<&data[0]<<endl;
cout<<"values in IterateLine"<<endl;
for(int i=0;i<5;i++){
cout<<data[i]<<endl;
}
return &data[0];
}
int main()
{
Mat img = imread("sir.png", CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH);
unsigned short int * x ;
//Iterate through the line
x = IterateLine(img);
int n=5;
foo(&x[0], n);
cout<<"The address in main() is"<<endl;
cout<<x<<endl;
cout<<"values in main are"<<endl;
for(int i=0;i<5;i++){
cout<<x[i]<<endl;
}
getch();
return 0 ;
}
{
行迭代器it(图像,p1,p2,8);
for(int i=0;i
您正在从IterateLine
返回指向本地数据的指针。这是未定义的行为。您应该先解决这个问题。@juanchopanza但当地址相同时,为什么数据会不同?因为其他东西会将其他数据放在那里,因为它可以?@juanchopanza地址001195D8和001195D8+1处的值对于不同的函数不能不同。我错了吗?谁在乎?你有未定义的行为。这是一个错误。首先修复它。谢谢,我必须为点(X1,X2),点(Y1,Y2)传递第三个参数。我的函数有三个参数。