如何将OpenCV 3.2映像保存到csv文件然后加载显示?

时间:2017-10-27 07:54:36

标签: c++ csv opencv

我正在尝试对图像执行一些操作,我必须将图像保存到csv文件,然后将其加载到显示器。我正在使用opencv 3,其中CvMLData似乎没有按照本例here.中的说明工作,我想3.2版本的功能已经改变。

CvMLData mlData;
mlData.read_csv("cameraFrame1.csv");
const CvMat* tmp = mlData.get_values();
cv::Mat img(tmp, true);

// set the image type
img.convertTo(img, CV_8UC3);

// set the image size
cv::resize(img, img, cv::Size(320, 256));

tmp->CvMat::~CvMat();

std::cout << "img: " << img << std::endl;

cv::namedWindow("img");
cv::imshow("img", img);
cv::waitKey(0);

1 个答案:

答案 0 :(得分:3)

是的,您显示的代码是针对OpenCV 2的,机器学习内容都在OpenCV 3中移动。可能值得阅读Transistion Guide

下面的代码和图片显示了如何将矩阵写入csv文件,重新读取,调整大小并将所有三个矩阵显示到窗口。

enter image description here

使用此代码:

#include <fstream>
void examplethree()
{
    cv::Mat mat = imread("mypic.png");
    imshow("window", mat);
    ofstream outputFile("cameraSamples.csv");
    outputFile << format(mat, cv::Formatter::FMT_CSV) << endl;
    outputFile.close();

    cv::Mat img;

    cv::Ptr<cv::ml::TrainData> raw_data = cv::ml::TrainData::loadFromCSV("cameraSamples.csv", 0, -2, 0);
    cv::Mat data = raw_data->getSamples();
    // optional if you have a color image and not just raw data
    data.convertTo(img, CV_8UC3);
    img = img.reshape(3); //set number of channels

    // set the image type
    img.convertTo(img, CV_8UC3);

    // set the image size
    cv::resize(img, img, cv::Size(320, 256));

    //std::cout << "img: " << img << std::endl;

    cv::namedWindow("img");
    cv::imshow("img", img);
    cv::imshow("mat", mat);
    cv::waitKey(0);
}