C++ 直接将所选图像传递给另一个函数

C++ 直接将所选图像传递给另一个函数,c++,mysql,opencv,image-processing,C++,Mysql,Opencv,Image Processing,我使用mysql作为人脸识别应用程序的数据库。我在训练阶段将图像存储到数据库中,在测试阶段,我将选择所有这些图像并与传入图像进行比较。因为我使用的是mysql,所以它在数据库中将图像存储为blob图像。因此,当我重新选择它时,我需要使用文件指针将其写入单独的图像文件中(这应该针对数据库中的每个图像完成) 但是在选择image之后,它将被存储到当前目录中。为了使用这些图像,我需要再次读取目录。但是我需要直接使用从该函数中选择的图像我们是否可以将所选图像传递到另一个函数中(无需从目录中再次读取)?如

我使用mysql作为人脸识别应用程序的数据库。我在训练阶段将图像存储到数据库中,在测试阶段,我将选择所有这些图像并与传入图像进行比较。因为我使用的是mysql,所以它在数据库中将图像存储为blob图像。因此,当我重新选择它时,我需要使用文件指针将其写入单独的图像文件中(这应该针对数据库中的每个图像完成)

但是在选择image之后,它将被存储到当前目录中。为了使用这些图像,我需要再次读取目录。但是我需要直接使用从该函数中选择的图像我们是否可以将所选图像传递到另一个函数中(无需从目录中再次读取)?如果是,请给我一个示例

I tried 'imdecode'function:
std::vector<std::string> vectordata;
vectordata.push_back(row[0]);//(row[0]);
 cv::Mat data_mat(vectordata,true);
 cv::Mat image(cv::imdecode(data_mat,1));
 cout<<"Height: " << image.rows <<" Width: "<<image.cols<<endl;
我尝试了“imdecode”功能:
矢量数据;
vectordata.push_back(第[0]行)//(第[0]行);
cv::Mat data_Mat(向量数据,真);
cv::Mat图像(cv::imdecode(数据_Mat,1));

cout请尝试使用此代码进行编码和解码,对我来说效果很好,您可能需要使用
uchar
来存储数据

Mat src=imread("src.jpg",1);
vector<uchar> buf;
imencode(".jpg",src,buf);

Mat dst=imdecode(buf,1);
imshow("src",src);
imshow("dst",dst);
Mat src=imread(“src.jpg”,1);
向量buf;
imencode(“.jpg”,src,buf);
Mat dst=imdecode(buf,1);
imshow(“src”,src);
imshow(“dst”,dst);

将图像转换为2d/1d矢量,并将矢量的RGB像素值保存在数据库中,而不是传递整个图像,然后提取这些值,并将这些值制成一个矩阵,我认为这对您有用。

所以您需要以压缩格式存储?在数据库中,它将以二进制形式存储,选择后,我需要将其传递给另一个函数。所以我们需要将其转换为“Mat”格式,我在上面解释过。但它仍然不能正常工作。这里的源图像位于“行”中,我们需要将其转换为“Mat”格式,然后只有它才能工作。我上面提到的方法是将“行”中的数据转换为“Mat”。但问题是转换后,所有图像的宽度和高度都为零(没有加载图像)。所以我们不能把它作为“imencode”函数的输入。它在throwOnEror中显示错误,如:未知错误代码-10(原始图像编码器错误:空JPEG图像(不支持DNL)),
row
是否表示连续BGR,BGR像素数据?row是MYSQL\u row类型。实际上,我对您的问题有点困惑,例如“我们可以将所选图像传递到另一个函数中吗?”(不从目录中再次读取)?如果是,请向我展示一个示例“因此您不想在mysql中存储”?我说的是从数据库中获取的图像(选定图像)。我需要将其直接传递给另一个函数,而不必从目录中再次读取。
Mat src=imread("src.jpg",1);
vector<uchar> buf;
imencode(".jpg",src,buf);

Mat dst=imdecode(buf,1);
imshow("src",src);
imshow("dst",dst);