我使用mysql作为面部识别应用程序的数据库。我在训练阶段将图像存储到数据库中,在测试阶段,我将选择所有这些图像并与输入图像进行比较。由于我使用的是mysql,因此在数据库中它将图像存储为blob图像。因此,当我选择它时,我需要使用文件指针将其写入单独的图像文件(这应该针对数据库中的每个图像完成)。
sprintf(temp,"SELECT data FROM ima1 WHERE id=%d",i);
sprintf(filename,"Gen_Image%d.jpeg",i);
fp = fopen(filename, "wb");
mysql_query(conn, temp);
result = mysql_store_result(conn);
row = mysql_fetch_row(result);
lengths = mysql_fetch_lengths(result);
fwrite(row[0], lengths[0], 1, fp);
但是在选择图像后,它将被存储到当前目录中。为了使用这些图像,我需要再次阅读目录。但我需要直接使用该功能中的选定图像。 我们可以将选定的图像传递给另一个功能(不再从目录中读取)吗?如果是,请给我举个例子
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;
它没有显示任何错误,但是它选择了零尺寸的图像,这意味着它没有选择图像。
答案 0 :(得分:0)
尝试使用此代码进行编码和解码,对我来说运行正常,您可能需要使用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);
答案 1 :(得分:0)
将您的图像转换为2d / 1d矢量,并将矢量的RGB像素值保存在数据库中,而不是传递整个图像,然后提取这些值并制作这些值,我认为这对您有用。