直接将所选图像传递给另一个功能

时间:2014-04-19 05:33:12

标签: c++ mysql opencv image-processing

我使用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;

它没有显示任何错误,但是它选择了零尺寸的图像,这意味着它没有选择图像。

2 个答案:

答案 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像素值保存在数据库中,而不是传递整个图像,然后提取这些值并制作这些值,我认为这对您有用。